桥接模式

  GOF:将抽象部分与它的实现部分分离,使它们都可以独立地变化

  类图:

  PS.Implementor的接口不一定要与Abstraction的接口一致,可以完全不一样。

  适用性:

  • 不希望在抽象和它的实现部分之间有一个固定的绑定关系。
  • 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。
  • 对一个抽象的实现部分的修改应对客户不产生影响。可以将实现部分放到私有的头文件中,该文件不提供给客户。
  • 想在多个对象间共享实现(可能使用引用计数)。

代码模板:

interface Implementor { void Operation(); } class ConcreteImplementorA implements Implementor { public void Operation() { System.out.println("具体实现A的方法"); } } class ConcreteImplementorB implements Implementor { public void Operation() { System.out.println("具体实现B的方法"); } } class Abstraction { protected Implementor implementor; public void SetImplementor(Implementor implementor) { this.implementor = implementor; } public void Operation() { implementor.Operation(); } } class RefinedAbstraction extends Abstraction { public void Operation() { implementor.Operation(); } }

  


   桥接模式将抽象和实现分离,用户只需要知道抽象提供了什么功能即可。这样,不管实现如何变化(比如某个游戏引擎改用了物理引擎),用户都可以照常使用该接口。

  桥接模式就是在需要多方面变化时,将继承变为组合/聚合,从而降低耦合。只有是is-a关系的时候才用继承,否则就用组合/聚合(has-a)。

  

  

你可能感兴趣的:(桥接模式)