0.思想
设计模式的核心操作是去观察你整个逻辑里面的变与不变,然后将变与不变分离,达到使变化的部分灵活、不变的地方稳定的目的。
1.工程模式
通过在构造函数上挂载方法 参数 new 出对象可以使用其方法
2.单例模式
单一实例 全局可访问
3.适配器模式
提高复用性 在原先接口 上进行扩展
理解:适配器是补弱 装饰器增强
4.装饰者模式
Decorator 是为了给一个函数赋能,增强它的某种能力
1 | const kuanWrite = function() { |
5.代理模式
使用 一个对象对 另一个对象进行侦听
代理模式能将代理对象与被调用对象分离,降低了系统的耦合度。中介作用保护原对象
6.外观模式
定义一个高层接口 使使用子系统更为方便
7.观察者模式
一对多 多个侦听一个对象 该对象改变通知 其他所有观察者对象
- 发布 & 订阅
8.状态模式?
做出行为 实时改变其状态
9.迭代器模式
提供一个遍历的统一接口
场景例子
- Array.prototype.forEach
- jQuery中的$.each()
- ES6 Iterator
10.桥接模式?
把抽象化与实现化解耦
11.组合模式
添加到一个集合 集中调用
将对象组合成树形结构,以表示“整体-部分”的层次结构。
12.原型模式
prototype 创建共享原型 拷贝原型创建新类 复用逻辑 性能提升
13.策略模式?
strategy 定义策略对象 和策略对象
14.享元模式
减少对象创建 降低系统内存
15.模板方法模式
公用代码 提取到公共父类 可变行为留给子类
16.职责链模式
多个对象 形成接收和发送者关系 形成一条链传递
多个流程的时候用
17.命令模式
对命令进行封装 使其易于扩展 命令发出者和接收者解耦 使其不需知其执行过程即可执行
18.备忘录模式
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。
19.中介者模式
解除对象与对象之间的紧耦合关系 通过中介者对象通信
20.解释器模?
给定一个语言, 定义它的文法的一种表示,并定义一个解释器, 该解释器使用该表示来解释语言中的句子。
21.访问者模式
22.发布订阅者模式✅
通过一个发射器 EventEmitter 挂载订阅者 发布者发布消息给-》发射器通知订阅者