桥接模式是一种对象结构型模式,它又被称为柄体模式或接口模式。桥接模式用一种巧妙的方式处理多层继承存在的问题,用抽象关联取代了多层继承,将类之间的静态继承关系转换为动态的对象组合关系,使得系统更加灵活,并易于扩展,同时有效地控制了系统中类的个数。
桥接模式中将两个独立变化的维度设计为两个独立的继承等级结构,在抽象层建立起一个抽象关联,该关联关系类似一条连接两个独立继承结构的桥,故名桥接模式。
桥接模式的定义:将抽象部分与它的实现部分解耦,使得两者都能够独立变化。
桥接模式的结构与实现:
1.Abstraction(抽象类):用于定义抽象类的接口,通常是抽象类,其中定义了一个Implementor(实现类接口)类型的对象并可以维护该对象,它与Implementor之间具有关联关系,既可以包含抽象业务方法,也可以包含具体业务。
public abstract class Abstraction {
public Implementor implementor;
public void setImplementor(Implementor implementor) {
this.implementor = implementor;
}
public abstract void operation();
}
2.Implementor(实现类接口):Implementor接口仅提供基本操作,而Abstraction定义的接口可能会做更多的复杂操作。Implementor接口对这些基本操作进行了声明,而具体实现交给其子类。通过关联关系,在Abstraction中不仅拥有自己的方法,还可以调用到Implementor中定义的方法,使用关联关系来替代继承关系。
public interface Implementor {
public void operationImpl();
}
3.RefinedAbstraction(扩充抽象类):为具体实现类,实现了在Abstraction中声明的抽象业务方法,而且会取调用在Implementor中定义的业务方法。
public class RefinedAbstraction extends Abstraction {
@Override
public void operation() {
//调用具体实现
implementor.operationImpl();
}
}
4.ConcreteImplementor(具体实现类):实现了Implementor接口,在不同的具体实现类中提供不同的实现,且提供给抽象类具体的业务操作方法。
public class ConcreteImplementor implements Implementor {
@Override
public void operationImpl() {
System.out.println("桥接模式实现!");
}
}
5.Test:
public class Test {
public static void main(String[] args) {
Implementor implementor=new ConcreteImplementor();
RefinedAbstraction abstraction=new RefinedAbstraction();
abstraction.setImplementor(implementor);
abstraction.operation();
}
}