跳至内容
一、创建型模式(对象怎么创建)
- Factory Method(工厂方法):定义一个创建对象的接口,让子类决定实例化哪个类,把实例化延迟到子类(目的:解耦)。
- Abstract Factory(抽象工厂):提供一个接口,负责创建一系列 “相关或相互依赖” 的对象,无需指定具体类。
- Builder(构建器):将一个复杂对象的构建与其表示相分离,同样的构建过程可创建不同表示。
- Prototype(原型):用原型实例指定创建对象的种类,并通过拷贝原型来创建新对象。
- Singleton(单件):保证一个类仅有一个实例,并提供全局访问点。
二、结构型模式(对象怎么组合)
- Adapter(适配器):将一类的接口转换成客户期望的另一接口,让原本不兼容的类一起工作。
- Bridge(桥接):将抽象部分与实现部分分离,使它们可以独立变化。
- Composite(组合):将对象组合成树形结构表示 “部分 – 整体” 层次,使用户对单个对象和组合对象的使用具有一致性。
- Decorator(装饰):动态地给对象增加额外职责,比继承更灵活(消除重复代码、减少子类个数)。
- Facade(门面):为子系统的一组接口提供一个一致的高层界面,让子系统更易使用。
- Flyweight(享元):运用共享技术支持大量细粒度对象。
- Proxy(代理):为其他对象提供一种代理以控制访问(隔离、使用接口)。
三、行为型模式(对象怎么协作)
- Template Method(模板方法):定义一个算法的骨架(稳定),把一些步骤延迟到子类(变化),子类可重定义特定步骤而不改变算法结构。
- Strategy(策略):定义一系列算法并封装,使它们可互相替换,算法独立于使用它的客户变化。
- Observer(观察者):定义对象间一对多的依赖,当 Subject 状态改变时,所有依赖者自动得到通知并更新。
- State(状态):允许对象在内部状态改变时改变其行为,仿佛修改了类。
- Command(命令):将请求封装为对象,支持参数化、排队、日志和可撤销操作。
- Iterator(迭代器):提供一种方法顺序访问聚合对象中的各元素,而不暴露内部表示。
- Mediator(中介者):用一个中介对象封装一系列对象交互,使对象松散耦合、可独立改变交互。
- Memento(备忘录):在不破坏封装的前提下捕获并保存对象内部状态,以便之后恢复。
- Chain of Responsibility(职责链):使多个对象都有机会处理请求,沿链传递直到有对象处理。
- Visitor(访问者):在不改变元素类的前提下,定义作用于其上的新操作(扩展)。
- Interpreter(解释器):给定语言定义其文法表示,并用解释器解释语言中的句子。
四、学习资源推荐
- 23 个小案例带你吃透 23 种设计模式(C++ 实现)
- 菜鸟设计模式:创建型 / 结构型 / 行为型 / J2EE 模式
- design-patterns-for-humans:设计模式超简单解释
- Design Patterns Wiki
- awesome-design-patterns
- python-patterns
- system-design-primer
- 快速记忆 23 种设计模式(知乎文章)
- java-design-patterns