23种设计模式
分类及定义参考《设计模式 可复用面向对象软件的基础》
分类
创建型(5):工厂方法、抽象工厂、单例、创建者(生成器)、原型模式。
结构型(7):适配器、桥接、组合、代理、装饰者、外观、享元。
行为型(11):解释器、模板方法、责任链、命令、迭代器、中介者、备忘录、观察者、状态、策略、访问者。
《设计模式 可复用面向对象软件的基础》中创建者为生成器,单例为单件。
定义
ID | Name | Desc |
---|---|---|
1 | 工厂方法 | 创建对象的接口,由子类决定将哪个类实例化。使一个类的实例化延迟到子类 |
2 | 抽象工厂 | 创建一系列相关或相互依赖对象的接口,而无需指定具体的类 |
3 | 单例 | 保证一个类只有一个实例,并提供一个全局访问点 |
4 | 原型 | 原型实例指定创建对象的种类,并通过拷贝这个原型创建新的对象 |
5 | 创建者 | 将复杂对象的构建过程和表示分开,使得同样的构建过程可以创建不同的表示 |
- | - | - |
6 | 适配器 | 将类的接口转变为客户希望的另一个接口,使原来由于接口不兼容不能在一起工作的类可以在一起工作 |
7 | 桥接 | 将抽象部分和实现部分分离,使他们都可以独立的变化 |
8 | 组合 | 将对象组合成树形结构,以表示“部分-整体“的层次结构。使得对单个对象和复杂对象的使用具有一致性 |
9 | 代理 | 为其他对象提供一个代理,以控制对这个对象的访问 |
10 | 装饰者 | 动态地给对象添加额外的职责,比生成子类方式更加灵活 |
11 | 外观 | 为子系统的一组接口提供一个统一的界面。定义了一个高层接口,使子系统更加容易使用 |
12 | 享元 | 通过共享技术有效地支持大量细粒度对象 |
- | - | - |
13 | 解释器 | 给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示解释该语言 |
14 | 模板方法 | 定义一个操作的算法的骨架,将一些步骤的实现延迟到子类。子类可以不改变算法结构,就能重新定义某些步骤 |
15 | 责任链 | 将请求的发送者和接受者解耦,使多个接收者都有机会处理请求。可以让多个对象组成一条链,让请求沿着该链传递,直到有一个对象处理他为止 |
16 | 命令 | 将一个请求封装成一个对象,这样就可以用不同的请求对客户进行参数化;对请求排队、记录请求日志、支持可取消的操作等 |
17 | 中介者 | 用一个对象封装一系列的对象交互。使对象间无需显示的调用,从而解耦,并且可以独立地修改对象间的交互 |
18 | 迭代器 | 提供一个顺序访问聚合对象内部元素的方法,而无需暴露对象的内部表示 |
19 | 观察者 | 定义对象间的一种一对多的依赖关系,从而使一个对象发生改变时,所有依赖他的对象都能得到通知,并自动更新 |
20 | 备忘录 | 在不破坏封装性的前提下,捕获对象的内部状态,并在外部进行保存。以后就可以将对象恢复到保存的状态 |
21 | 状态 | 在对象的内部状态发生变化时,允许对象改变他的行为。对象看起来好像修改了他所属的类 |
22 | 策略 | 定义一系列算法,将它们一个个封装起来,并使它们可以相互替换。算法的变化独立于使用它的客户 |
23 | 访问者 | 表示一个作用于某对象结构中各个元素的操作。可以在不改变各元素类的前提下可以定义作用于这些元素的新操作 |
单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。
建造者(Builder)模式:将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。
代理(Proxy)模式:为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。
桥接(Bridge)模式:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。
外观(Facade)模式:为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问。
命令(Command)模式:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。
访问者(Visitor)模式:在不改变集合元素的前提下,为一个集合中的每个元素提供多种访问方式,即每个元素有多个访问者对象访问。
解释器(Interpreter)模式:提供如何定义语言的文法,以及对语言句子的解释方法,即解释器。
6大原则
开闭原则
里氏代换原则
接口隔离原则
依赖倒转原则
迪米特法则,最少知道原则
合成复用原则