设计模式
基础概念
什么是设计模式
针对设计问题的通用解决方案
设计模式优点
- 有利于代码复用
- 有利于代码稳定可拓展
- 有利于代码可读性提升
设计模式使用场景
- 优先考虑全局设计
- 合理权衡使用需求和维护成本
原则
- 开闭原则(OCP:Open Closed Principle): 开启拓展,关闭修改。已有场景下,对于需要拓展的功能进行开放、拒绝直接的对于系统功能进行修改。常用于
流式数据处理 - 单一职责原则(SRP:Single Responsibility Principle):岗位职责单一,互不重叠。通过解耦让每一个职责更加独立。相当于slots(HOC)/ decotaror/ wrapper
- 依赖倒置原则(DIP:Dependence Inversion Principle):上层的实现不应当依赖下层的细节。上层应用面向抽象进行coding,而不是面向实现 ->降低了需求与实现的耦合。常见于
依赖的收集 - 接口隔离原则(ISP:Interface Segregation Principle):对外沟通的通道。多个专业接口比单个胖接口好用。重构组件划分 + 状态机
- 里氏替换原则(LSP:Liskov Substitution Principle):子类可以拓展功能,但不应改变功能。子类可以覆盖父类 -> 父类能出现的地方,子类一定能出现。
维护核心的同时也要抽离妥协增加分层
模式分类
- 创建类(创建元素):
- 工厂:生产同类型商品,隐藏创建过程 + 暴露共同接口
- 建造者:独立堆砌商品,注重过程与搭配。模块的抽象与独立解耦,建造者负责创建串联整体。
- 单例:以单个保证系统的唯一性和稳定性。全局只有一个实例
- 批量生产同类型应用来满足频繁使用同一类素材时建议使用共工厂模式
- 当我们可以将元功能模块化解耦,并且重于频繁编排时,通常会使用建造者模式
- 全局只要一个实例,注重的是一体化 + 状态机,这个时候就是单例模式(router,store)
- 结构型(代码结构)
- 适配器:适配已有的方案
- 装饰器:增强已有方案
- 代理:集约方案
在已有方案场景下:
- 中间转换参数,适配/兼容已有方案 - 适配器
- 在已有方案中,批量提供/提升响应功能 - 装饰器
- 当把调用方和被调用方分离,不直接产生调用关系 - 代理模式
- 行为型(模块行为的总结)
- 命令:通过媒介包裹传递。请求以一种命令的形式包裹起来,并且由发起方传递给实施方的一种流程。实体通过一个固定的渠道媒介以产生沟通(Vuex的action和mutation)
- 模板:易拓展。在模板中定义好模块的概览(简单的说明书)
- 观察者:模块间的实时互通。当一个属性发生改变时,观察者会联系引发相关状态触发相应逻辑的改变。(Vue响应式)
- 职责链:单向链形式。链式调用,自责独立,顺序执行。节点互斥但是前后链相连
- 发出方 + 媒介 + 接收方,- 命令模式
- 对于基础说明书进行的一次实际业务结合操作 - 模板模式
- 通过观察者,可以让被观察者实时接收消息,并且触发一定的业务操作 - 观察者模式
- 独立的职责单元链式执行,逐步操作流程 - 职责链