使用场景

  • 当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时
  • 当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时

    优缺点

  • 抽象和实现可以独立扩展,不会影响到对方

  • 其实现细节对客户透明

    设计原理

    核心思想

    其一:将抽象与实现分离使他们可以独立(通俗的理解:具体的实现不在子类中,“工具人”类)
    其二:通过对象组合的方式取代继承实现复杂的桥接。

实现步骤

个人理解

具体实现是通过注入的方式到“父类”的

类图

企业微信截图_16288583456162.png

主要角色

  1. 抽象角色Abstraction:定义抽象类,定义一个具体的行为接口。(单从理解的角度没有存在的必要)
  2. 抽象角色业务扩展RefinedAbstraction:通过组合关系调用抽象实现者中的方法实现抽象角色的行为接口。
  3. 抽象实现者Implementor:定义实现者的接口,供RefinedAbstraction调用。
  4. 具体实现者ConcreteImplementor:给出实现化角色接口的具体实现,一般通过注入的方式传到RefinedAbstraction中。

    具体实现

    ```c private readonly IGuiOper _guiOper;

public GuiManager(IGuiOper guiOper) { _guiOper = guiOper; } ```


参考文档