桥接模式
一、定义
将抽象和实现解耦,使得两者可以独立的变化。
二、类图表示
三、实现
1、Implementor
package pattern.structual.bridge;
public abstract class Implementor {
public abstract void operation();
}
package pattern.structual.bridge;
public class ConcreteImplementorA extends Implementor {
@Override
public void operation() {
System.out.println("ConcreteImplementorA operation...");
}
}
package pattern.structual.bridge;
public class ConcreteImplementorB extends Implementor{
@Override
public void operation() {
System.out.println("ConcreteImplementorB operation...");
}
}
2、Abstraction
package pattern.structual.bridge;
public abstract class Abstraction {
protected Implementor implementor;
public void setImplementor(Implementor implementor) {
this.implementor = implementor;
}
public abstract void operation();
}
package pattern.structual.bridge;
public class RefinedAbstraction extends Abstraction {
@Override
public void operation() {
implementor.operation();
}
}
四、使用
package pattern.structual.bridge;
public class Client {
public static void main(String[] args) {
Abstraction abstraction = new RefinedAbstraction();
abstraction.setImplementor(new ConcreteImplementorA());
abstraction.operation();
abstraction.setImplementor(new ConcreteImplementorB());
abstraction.operation();
}
}
- 程序输出:
ConcreteImplementorA operation...
ConcreteImplementorB operation...
五、适用场合
- 不希望在抽象和它的实现之间有一个固定的绑定关系(在程序运行时,实现部分可以被选择或切换)
- 类的抽象和实现都可以通过增加子类的方式进行扩展
- 对一个抽象的实现部分的修改不应该对客户端产生影响,即客户端的代码不必重新编译