桥接模式的定义
*桥接(Bridge)模式: * 将抽象与实现分离,使他们可以独立变化,它是用组合关系代替继承关系来实现的,从而降低了抽象与实现这两个可变维度的耦合度
特点
- *优点: *
- 由于抽象与实现分离,所以扩展能力强
- 其实现细节对客户透明
- *缺点: *
- 由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,这增加了系统的理解与设计难度
模式的结构与实现
模式的结构
抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用
扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法
实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用
具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现
模式的实现
/** * 桥接模式 * 通俗理解: 如果有两个接口或抽象类: 颜色与形状,现在要创建一个图形(包含颜色形状) * 方案1. 实现两个接口成为新类即新的图形,缺点是如果有很多其他颜色的图形那需要很多个实现类 * 方案2. 实现图形接口,在内部维护一个颜色对象,此时,只需要传入不同颜色对象即可生成不同颜色图形,即使用桥接模式 */ //实现化角色: 如颜色 interface Implementor{ void operationImpl(); } //具体实现化角色 class ConcreteImplementorA implements Implementor{ @Override public void operationImpl() { System.out.println("具体实现化角色被访问"); } } //抽象化角色: 如形状 abstract class Abstraction{ //内部维护一个实现化角色:如颜色对象 protected Implementor imple; protected Abstraction(Implementor imple) { this.imple = imple; } public abstract void operation(); } //扩展抽象化角色 class RefinedAbstraction extends Abstraction{ protected RefinedAbstraction(Implementor imple) { super(imple); } @Override public void operation() { System.out.println("扩展抽象化角色被访问"); imple.operationImpl(); } } //测试 public class BridgeTest { public static void main(String[] args) { Implementor imple = new ConcreteImplementorA(); Abstraction abs = new RefinedAbstraction(imple); abs.operation(); } }