一、桥接模式定义
1.桥接模式也称为桥梁模式、接口模式或柄体模式,是将抽象部分与它的具体实现部分分离,使它们都可以独立地变化,属于结构型模式
2.桥接模式主要目的是通过组合的方式建立两个类之间的联系,而不是继承。但又类似于多重继承方案,但是多重继承方案往往违背了类的单一职责原则,其复用性比较差,桥接模式是比多重继承更好的替代方案。桥接模式的核心在于解耦抽象和实现
3.桥接模式的应用场景:
A.在抽象和具体实现之间需要增加更多的灵活性的场景
B.一个类存在两个(或多个)独立变化的维度,而这两个(或多个)维度都需要独立进行扩展
C.不希望使用继承,或因为多层继承导致系统类的个数剧增
二、桥接模式示例
1.桥接模式主要包含四种角色:
A.抽象(Abstraction):该类持有一个对实现角色的引用,抽象角色中的方法需要实现角色来实现。抽象角色一般为抽象类(构造函数规定子类要传入一个实现对象)
B.修正抽象(RefinedAbstraction):Abstraction的具体实现,对Abstraction的方法进行完善和扩展
C.实现(Implementor):确定实现维度的基本操作,提供给Abstraction使用,该类一般为接口或抽象类
D.具体实现(ConcreteImplementor):Implementor的具体实现
2.桥接模式通用写法
1 public abstract class Abstraction { 2 protected IImplementor mImplementor; 3 4 public Abstraction(IImplementor implementor){ 5 this.mImplementor = implementor; 6 } 7 8 public void operation(){ 9 this.mImplementor.operationImpl(); 10 } 11 } 12 13 public class RefinedAbstraction extends Abstraction { 14 15 public RefinedAbstraction(IImplementor implementor) { 16 super(implementor); 17 } 18 19 @Override 20 public void operation() { 21 super.operation(); 22 System.out.println("refined operation"); 23 } 24 } 25 26 public interface IImplementor { 27 void operationImpl(); 28 } 29 30 public class ConcreteImplementorA implements IImplementor { 31 @Override 32 public void operationImpl() { 33 System.out.println("I'm ConcreteImplementorA"); 34 } 35 } 36 37 public class GeneralBridgeTest { 38 public static void main(String[] args) { 39 IImplementor imp = new ConcreteImplementorA(); 40 Abstraction abs = new RefinedAbstraction(imp); 41 abs.operation(); 42 } 43 }
3.桥接模式优缺点
A.优点
a.分离抽象部分和具体实现部分
b.提高了系统的扩展性
c.符合开闭原则
d.符合合成复用原则
B.缺点
a.增加了系统的理解与设计难度
b.需要正确的识别系统中两个独立变化的维度