设计模式通常分为三大类:创建型、结构型和行为型。
- 创建型模式:主要用于解决对象创建问题
- 结构型模式:主要用于解决对象组合问题
- 行为型模式:主要用于解决对象之间的交互问题
创建型模式
创建型模式关注于对象的创建机制,提供了创建对象的灵活性。以下是Java中的创建型设计模式:
类型 |
具体名称 |
特点 |
创建型 |
单例模式 |
确保一个类只有一个实例,并提供一个全局访问点。 |
创建型 |
工厂方法模式 |
定义一个接口用于创建对象,但由子类决定实例化哪个类。 |
创建型 |
抽象工厂模式 |
提供一个接口,用于创建相关或依赖对象的家族。 |
创建型 |
建造者模式 |
使用多个简单的对象一步步构建一个复杂的对象。 |
创建型 |
原型模式 |
通过复制现有的实例来创建新的实例。 |
结构型模式
结构型模式关注于如何将类或对象组合成更大的结构。以下是Java中的结构型设计模式:
类型 |
具体名称 |
特点 |
结构型 |
适配器模式 |
将一个类的接口转换成客户端所期望的另一种接口。 |
结构型 |
装饰器模式 |
动态地给对象添加额外的职责。 |
结构型 |
代理模式 |
为其他对象提供一种代理以控制对这个对象的访问。 |
结构型 |
组合模式 |
将对象组合成树形结构以表示"部分-整体"的层次结构。 |
结构型 |
外观模式 |
为子系统中的一组接口提供一个统一的高层接口。 |
结构型 |
桥接模式 |
将抽象部分与实现部分分离,使它们可以独立变化。 |
结构型 |
享元模式 |
通过共享对象来有效地支持大量细粒度的对象。 |
行为型模式
行为型模式关注于对象之间的通信、交互。以下是Java中的行为型设计模式:
类型 |
具体名称 |
特点 |
行为型 |
观察者模式 |
定义了一种一对多的依赖关系,状态改变时自动更新。 |
行为型 |
策略模式 |
定义了一系列算法,并将每一个算法封装起来。 |
行为型 |
命令模式 |
将请求封装为一个对象,从而使您可以用不同的请求对客户进行参数化。 |
行为型 |
状态模式 |
允许一个对象在其内部状态改变时改变其行为。 |
行为型 |
责任链模式 |
将请求的发送者和接收者解耦,通过一系列处理对象来处理请求。 |
行为型 |
备忘录模式 |
捕获对象的内部状态,以便在未来恢复。 |
行为型 |
迭代器模式 |
提供一种方法顺序访问一个集合对象中的元素。 |
行为型 |
访问者模式 |
在不改变元素类的前提下定义作用于这些元素的新操作。 |
行为型 |
中介者模式 |
通过一个中介者对象来封装一系列的对象交互。 |
行为型 |
解释器模式 |
定义一种语言的文法表示,并定义一个解释器来处理该语言。 |
行为型 |
过滤器模式 |
允许通过一系列的处理对象来过滤请求。 |
六大设计原则
名称 |
特点 |
单一职责原则(SRP) |
一个类应该只有一个引起它变化的原因。也就是说,一个类只应该有一个职责。 |
开放-关闭原则(OCP) |
软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。即通过添加新代码扩展功能,而不是修改现有代码。 |
里氏替换原则(LSP) |
子类对象应该能够替换父类对象,程序的功能不受影响。即子类必须能够完全替代父类。 |
接口隔离原则(ISP) |
一个类对另一个类的依赖应该建立在最小的接口上。即客户端不应该依赖它不需要的接口。 |
依赖倒置原则(DIP) |
高层模块不应该依赖低层模块,二者都应该依赖抽象。即应该依赖于接口而不是具体实现。 |
合成复用原则(CRP) |
尽量使用组合/聚合的方式,而不是使用继承。即优先选择组合而不是继承来实现代码复用。 |
汇总表格
类型 |
具体名称 |
特点 |
创建型 |
单例模式 |
确保一个类只有一个实例,并提供一个全局访问点。 |
|
工厂方法模式 |
定义一个接口用于创建对象,但由子类决定实例化哪个类。 |
|
抽象工厂模式 |
提供一个接口,用于创建相关或依赖对象的家族。 |
|
建造者模式 |
使用多个简单的对象一步步构建一个复杂的对象。 |
|
原型模式 |
通过复制现有的实例来创建新的实例。 |
|
|
|
|
|
|
结构型 |
适配器模式 |
将一个类的接口转换成客户端所期望的另一种接口。 |
|
装饰器模式 |
动态地给对象添加额外的职责。 |
|
代理模式 |
为其他对象提供一种代理以控制对这个对象的访问。 |
|
组合模式 |
将对象组合成树形结构以表示"部分-整体"的层次结构。 |
|
外观模式 |
为子系统中的一组接口提供一个统一的高层接口。 |
|
桥接模式 |
将抽象部分与实现部分分离,使它们可以独立变化。 |
|
享元模式 |
通过共享对象来有效地支持大量细粒度的对象。 |
|
|
|
|
|
|
行为型 |
观察者模式 |
定义了一种一对多的依赖关系,状态改变时自动更新。 |
|
策略模式 |
定义了一系列算法,并将每一个算法封装起来。 |
|
命令模式 |
将请求封装为一个对象,从而使您可以用不同的请求对客户进行参数化。 |
|
状态模式 |
允许一个对象在其内部状态改变时改变其行为。 |
|
责任链模式 |
将请求的发送者和接收者解耦,通过一系列处理对象来处理请求。 |
|
备忘录模式 |
捕获对象的内部状态,以便在未来恢复。 |
|
迭代器模式 |
提供一种方法顺序访问一个集合对象中的元素。 |
|
访问者模式 |
在不改变元素类的前提下定义作用于这些元素的新操作。 |
|
中介者模式 |
通过一个中介者对象来封装一系列的对象交互。 |
|
解释器模式 |
定义一种语言的文法表示,并定义一个解释器来处理该语言。 |
|
过滤器模式 |
允许通过一系列的处理对象来过滤请求。 |