软件开发过程中的最佳实践,是对软件开发的经验总结。基于面向对象方式。

经典的设计模式理论一般基于强类型的编程语言,例如Java,而在更新的现代动态类型语言或者是像Rust基于特征的语言,因为限制少了,则设计模式会应用的更少。

对于我来说学习设计模式的意义:对构建模块化思维有很大的帮助。

创建型模式:定义对象的创建

  • 工厂模式 在有很多个子类的情况下,用字符串对应不同的子类,然后装配对象
  • 单例模式 保证单个类永远只有一个实例
  • 建造者模式 建造者通过一个配方模版,创建复杂对象
  • 原型模式 缓存对象保存了所有的模型对象,需要使用时克隆出来
  • 享元模式 用一个哈希表,保存所有已经实例化的对象,当需要时从哈希表中取用

结构型模式:定义对象之间的结构(空间维度)

  • 适配器模式 保留对象已有的功能,使用新的适配器使其可以对接到新的外部系统。
  • 装饰器模式 保留对象已有的功能,为其加入新的功能
  • 代理模式 使用一个代理劫持对原类的访问,执行额外的处理
  • 外观模式 提供单一的对外接口,外部模块在访问内部时无需关心内部的结构
  • 桥接模式 打包一整项功能,抽象成一个接口,交给外部系统
  • 组合器模式 允许自己包含自己,形成嵌套树形结构

行为性模式:定义对象的行为(时间维度)

  • 策略模式 灵活切换不同行为模式
  • 模版模式 先总后分,先定义逻辑大框架(模版),然后细化细节
  • 观察者模式 当被观察者修改时,观察者对象立即被通知
  • 发布订阅模式 用中间件解耦观察者模式
  • 拦截过滤器模式 在执行一段代码之前,先拦截它们,利用中间件处理(过滤)之后再进行最终的处理
  • 迭代器模式 使用迭代方式,顺序访问数据
  • 责任链模式 生成一个对象链(责任链),在链上找到对应的责任对象,然后再处理
  • 命令模式 将命令封装成对象,利用中间件将命令作用于目标
  • 备忘录模式 将行为记录成“便笺”,保存成备忘录下来,之后还可以在备忘录中查询历史记录
  • 状态模式 跟踪一个环境的状态,当状态变化时环境也跟着变化
  • 访问者模式 实现数据和算法的分离,访问者实现算法,被访问的对象就是数据
  • 中介者模式 利用中介规范所有对象的行为
  • 解释器模式 形式化表示语句和文法,一般用于语言处理