桥接模式,将抽象和实现解耦, 使得两者可以独立地变化。桥接模式能够保证各个承担不同业务的行为类的独立性,同时也能对行为类的方法进行扩展。
示例代码:
// 业务类的接口
public interface Implementor {
// 业务方法
public void operation();
}
// 具体业务类A
public class ConcreteImplementorA implements Implementor{
@Override
public void operation() {
// 具体业务类A的业务方法
}
}
// 具体业务类B
public class ConcreteImplementorB implements Implementor{
@Override
public void operation() {
// 具体业务类B的业务方法
}
}
// 桥接抽象类
public abstract class Abstraction {
// 引用行为类对象
private Implementor implementor;
public Implementor getImplementor() {
return implementor;
}
public void setImplementor(Implementor implementor) {
this.implementor = implementor;
}
// 桥接类的方法调用行为类的方法
public void operation(){
this.implementor.operation();
}
}
// 抽象桥接类的一个具体实现类
public class ConcreteAbstraction extends Abstraction {
@Override
public void operation() {
// 这里可以进行扩展
super.getImplementor().operation();
}
}
// 测试类
public class Test {
public static void main(String[] args) {
Abstraction abstraction = new ConcreteAbstraction();
// 桥接类调用实现类A
abstraction.setImplementor(new ConcreteImplementorA());
abstraction.operation();
// 桥接类调用实现类B
abstraction.setImplementor(new ConcreteImplementorB());
abstraction.operation();
}
}
桥接模式将抽象和实现解耦,二者不互相影响,同时抽象部分和具体实现部分都能方便的进行扩展。
使用场景:
如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
抽象化角色和实现化角色可以以继承的方式独立扩展而互不影响,在程序运行时可以动态将一个抽象化子类的对象和一个实现化子类的对象进行组合,即系统需要对抽象化角色和实现化角色进行动态耦合。
一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。