🍖 设计模式总览
2022年6月20日
- 设计模式
🍖 设计模式总览
1. 遵循原则
1) 单一职责
- 一个类和方法只能做一件事
- 降低耦合度
2) 开闭原则
- 对外扩展开放
- 对内修改封闭
3) 里氏替换
- 多态
- 子类可以替换父类,但父类不一定能够替换子类
4) 依赖倒置
- 程序要依赖抽象层,上层与下层之间不直接依赖
5) 接口隔离
- 使用多个小的单一接口,而非大的总接口
6) 迪米特原则
- 一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立
2. 分类
1) 创建型
- 提供创建对象的机制, 能够提升已有代码的灵活性和可复用性
- 用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。
- GoF 中提供了 单例、原型、工厂方法、抽象工厂、建造者 5 种创建型模式
综述
- 单例模式为了保证全局使用的是同一对象,一方面是安全性考虑,一方面是为了节省资源
- 简单工厂模式最简单
- 工厂模式在简单工厂模式的基础上增加了选择工厂的维度,需要第一步选择合适的工厂
- 抽象工厂模式有产品族的概念,如果各个产品是存在兼容性问题的,就要用抽象工厂模式
- 建造者模式专门对付属性很多的那种类,为了让代码更优美
- 原型模式用到 Object 类中的 clone() 方法
2) 结构型
- 介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效
- GoF 中提供了 代理、适配器、桥接、装饰、外观、享元、组合 7 种结构型模式
综述
- 代理模式是做方法增强的,
- 适配器模式是把鸡包装成鸭这种用来适配接口的,
- 桥梁模式做到了很好的解耦,
- 装饰模式从名字上就看得出来,适合于装饰类或者说是增强类的场景,
- 门面模式的优点是客户端不需要关心实例化过程,只要调用需要的方法即可,
- 组合模式用于描述具有层次结构的数据,
- 享元模式是为了在特定的场景中缓存已经创建的对象,用于提高性能
代理 VS 适配器
- 相同点:
- 创建一个代理类 | 适配器类,里面包含目标原有方法
- 不同点:
- 目的不同:
- 代理模式主要是想实现对原有方法的增强
- 适配器模式主要是提供类型的转换,将一个类转换成想要的另一个类,两个类之间原本并没有继承关系
- 目的不同:
3) 行为型
- 用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责
- GoF 中提供了 模板方法、策略、命令、责任链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器 11 种行为型模式