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