• 为复用成功的设计采用设计模式
  • 创建型设计模式

  • 工厂方法模式(类模式)

  • 意图,定义使类的实例化延迟到子表
    image.png
  • 抽象工厂模式

  • 意图,创造一系列接口,无需执行他们具体的类,以便让一系列对象联合使用
    image.png
  • 系统独立于产品创建、组成和表示
  • 建造者模式 Builder

  • 意图,将复杂对象的构建和表示分离,同样的构建过程创建不同表示
    image.png
  • 原型模式 Prototype

  • 让对象复制自身
    image.png
  • 系统独立于对象创建、构成和表示
  • 单例模式 Singleton

  • 保证类仅有一个实例,提供一个全局访问点
  • 结构型设计模式

  • 适配器模式(可能有类模式,会用的多重继承,但很少) Adapter

  • 意图,把一个类接口转换成客户希望的例外一个接口
    image.png
  • 想使用一个已有类的接口,但接口不符合要求
  • 桥接模式 Bridge

  • 意图,将抽象部分与实现部分分离
    image.png
  • 组合模式 Composite

  • 意图,把对象组合成树型结构表现部分-整体的层次结构,使用具有一致性(一个方法处理不同对象)
    image.png
  • 装饰模式 Decorator

  • 意图,动态给对象添加一些额外职责
    image.png
  • 不影响其他对象,动态、透明地给对象添加职责
  • 外观模式 Facade

  • 意图,给子系统的一组接口提供一个一致的界面
    image.png
  • 适用给复杂子系统提供简单接口,以及客户与抽象类实现部分有很大依赖性,还有定义子系统每层入口点
  • 享元模式 Flyweight

  • 意图,支持大量细粒度(细分)对象
  • 适用使用大量对象,有很大存储开销,删除外部状态,用较少的共享对象代替多组对象
  • 代理模式 Proxy

  • 意图,为其他对象提供代理控制对这个对象的访问
  • 适用于用通用复杂的对象指针代替简单的指针
  • 行为型设计模式

  • PS:解释器和模板方法是类模式
  • 责任链模式

  • 意图,避免请求的发送者和接收者的耦合关系,延链传递请求
    image.png
  • 适用于不明确接收者,自动确定处理请求的对象
  • 命令模式 Command

  • 意图,把请求封装对象,用不同请求对对象参数化,对请求排队、日志、撤回操作
    image.png
  • 适用于参数化对象、不同时刻指定排列执行请求、取消操作、修改日志
  • 中介者模式 Mediator

  • 意图,封装一系列交互
    image.png
  • 适用于对象通信方式复杂
  • 备忘录模式 Memento

  • 意图,不破坏封装性的前提下,捕获对象内部状态,方便回复
    image.png
  • 保存状态,方便恢复
  • 观察者模式 Observer

  • 意图,定义一种一对多的依赖关系,状态改变时,依赖的对象都得到通知并更新(PS subject知道它的观察者)
    image.png
  • 适用于一个对象要改变/通知其他对象,不知具体多少对象
  • 状态模式 State

  • 意图,让一个对象在内部状态改变时改变行为
    image.png
  • 适用于用庞大多分支的条件语句,依赖于该对象的状态
  • 策略模式 Strategy

  • 意图,定义一系列算法,封装起来,是算法可以独立于客户端变化
    image.png
  • 适用于相关类仅行为有异,使用一个算法不同变体
  • 模板方法模式 Template Method

  • 意图,定义操作的算法骨架
    image.png
  • 父类定义抽象原语操作(基本操作)
    适用于实现算法不变部分,可变部分子类实现,子类可拓展
  • 访问者模式 Vistor

  • 意图,对某对象结构中各元素的操作
    image.png
  • 适用于一个对象结构有很多类,有不同的接口,用户对对象实施依赖具体类的操作(多态accept)