12桥接模式

一、桥接模式定义

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.需要正确的识别系统中两个独立变化的维度

上一篇:eve-ng模拟ospf虚连接小实验


下一篇:pytest文档7-计算单元测试代码覆盖率(pytest-cov)