桥接模式(bridge pattern)
桥接模式(bridge pattern):属于对象的结构型模式。将抽象部分与它的实现部分分离,使它们都可以独立地变化。
桥接模式UML图
由图可看出,系统包含了两个等级结构
- 由抽象化角色和被提炼的抽象化角色组成的抽象化等级结构
- 由实现化角色和两个具体的实现化角色组成的实现化等级结构
桥接模式涉及的角色
抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。
被提炼的抽象化(RefineAbstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。
实现化(Implementor)角色:这个角色给出实现化角色的接口,但不给出具体的实现。
具体实现化(ConcreteImplementor)角色:这个角色给出实现化角色接口的具体实现。
示例代码
实现化抽象类 Implementor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
知识兔td> | package com.example.bridge; * 桥接模式:实现化抽象类 * * @author pengdh * @date: 2017-07-30 23:32 */ public abstract class { * 实现抽象部分需要的某些具体功能 */ public abstract void operationImpl(); }
知识兔td> |
具体实现 A 类 ImplementorA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
知识兔td> | package com.example.bridge; * 桥接模式:具体实现 A 类 * * @author pengdh * @date: 2017-07-30 23:41 */ public class ImplementorA extends { public void operationImpl() { System.out.println("具体实现 A 方法执行!"); } }
知识兔td> |
具体实现 B 类 ImplementorB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
知识兔td> | package com.example.bridge; * 桥接模式:具体实现 B 类 * * @author pengdh * @date: 2017-07-30 23:42 */ public class ImplementorB extends { public void operationImpl() { System.out.println("具体实现 B 方法执行!"); } }
知识兔td> |
抽象化类 Abstraction
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
知识兔td> | package com.example.bridge; * 桥接模式:抽象化类 * * @author pengdh * @date: 2017-07-30 23:34 */ public abstract class Abstraction { protected Implementor impl; protected Abstraction(Implementor impl) { this.impl = impl; } public abstract void operation(); }
知识兔td> |
被提炼的抽象化类 RefinedAbstraction
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
知识兔td> | package com.example.bridge; * 桥接模式:被提炼的抽象化类 * * @author pengdh * @date: 2017-07-30 23:36 */ public class RefinedAbstraction extends Abstraction { protected RefinedAbstraction(Implementor impl) { super(impl); } public void operation() { impl.operationImpl(); } }
知识兔td> |
客户端测试类 BridgePatternTest
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
知识兔td> | package com.example.bridge; * 桥接模式:客户端测试类 * * @author pengdh * @date: 2017-07-30 23:43 */ public class BridgePatternTest { public static void main(String[] args) { Abstraction ab1 = new RefinedAbstraction(new ImplementorA()); ab1.operation(); Abstraction ab2 = new RefinedAbstraction(new ImplementorB()); ab2.operation(); } }
知识兔td> |
桥梁模式的优点
桥梁模式分离了抽象部分和实现部分,即实现系统可能有多种角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。
桥梁模式更好的利用了合成/聚合复用原则,使得抽象部分和实现部分可以分别独立地扩展,而不会相互影响,从而大大提高了系统的可扩展性。
参考文献
原文:大专栏 Java设计模式(十九):桥接模式