设计模式(23种)

0.思想

设计模式的核心操作是去观察你整个逻辑里面的变与不变,然后将变与不变分离,达到使变化的部分灵活、不变的地方稳定的目的。

1.工程模式

通过在构造函数上挂载方法 参数 new 出对象可以使用其方法

2.单例模式

单一实例 全局可访问

3.适配器模式

提高复用性 在原先接口 上进行扩展

理解:适配器是补弱 装饰器增强

4.装饰者模式

Decorator 是为了给一个函数赋能,增强它的某种能力

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
const kuanWrite = function() {
this.writeChinese = function() {
console.log('我只会写中文');
};
};

// 通过装饰器给阿宽加上写英文的能力
const Decorator = function(old) {
this.oldWrite = old.writeChinese;
this.writeEnglish = function() {
console.log('给阿宽赋予写英文的能力');
};
this.newWrite = function() {
this.oldWrite();
this.writeEnglish();
};
};

const oldKuanWrite = new kuanWrite();
const decorator = new Decorator(oldKuanWrite);
decorator.newWrite();

5.代理模式

使用 一个对象对 另一个对象进行侦听

代理模式能将代理对象与被调用对象分离,降低了系统的耦合度。中介作用保护原对象

阮一峰Proxy

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 挂载订阅者 发布者发布消息给-》发射器通知订阅者

下一篇