桥接模式
一、定义
将抽象和实现解耦,使得两者可以独立的变化。
二、类图表示

三、实现
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...
五、适用场合
- 不希望在抽象和它的实现之间有一个固定的绑定关系(在程序运行时,实现部分可以被选择或切换)
- 类的抽象和实现都可以通过增加子类的方式进行扩展
- 对一个抽象的实现部分的修改不应该对客户端产生影响,即客户端的代码不必重新编译