设计原则:最重要的是开放封闭原则,对扩展开放(可扩展),对修改关闭(保持原有的功能不被破坏,使其稳定);
-
适配器模式:将一些不兼容的接口,变成我们所期望的接口
应用场景:
在数据处理上,将不同格式的数据经过转换变成一个标准的数据格式。
1.处理时间格式化的函数
2.给函数的参数 进行默认值处理
3.vue里面的计算属性computed,将一个值变成一个可以展示在页面上的数据
-
装饰器模式:不改变原有的功能,去扩展一些其他功能
应用场景:react的高阶组件,接受一个组件 返回一个增强的组件
-
代理模式:由于一个对象不能直接使用另一个对象,需要通过代理对象在这两个对象之间起到中介作用。
应用场景:es6的Proxy,解决跨域
-
外观模式:主要目的是对外提供一个简化的接口给客户端使用,隐藏底层复杂的逻辑
应用场景:rudux库对外暴露了combineReducer、compose、createStore等方法给用户使用。
-
观察者模式:有两个角色,观察者与被观察者,被观察者与观察者之前存在一对多的依赖关系。观察者会被注册到被观察者里,当被观察者发生变化的时候,通知所有观察者进行更新操作。
特点是:观察者与被观察者是耦合的,并且观察者的更新方法是由被观察者来调用的
应用场景:
1.前端里的事件系统就是典型的观察者模式的应用,当事件触发时,注册的事件就会被执行。
2.另外Promise的实现原理,当状态为Pending时会将then的成功和失败回调分别存放在成功和失败的任务队列数组里,等状态发生变化的时候去依次执行回调函数。
3.redux的subscribe
-
发布订阅模式(23种设计模式中并没有这个,它是观察者模式的一个别称):三个角色,发布者、订阅者以及调度中心。发布者与订阅者不直接通信,而是通过中介来通信。发布者与订阅者之间耦合度低。
vue的双向绑定原理就用到了发布订阅模式
代理模式VS 适配器模式;代理模式VS装饰器模式
适配器模式主要目的是将不同的接口,通过一个适配方法,转成客户端需要的接口
代理模式主要目的是为对象提供一个间接访问的方式。注重对对象的访问和控制。
装饰器模式主要目的是原有的功能不变的基础上,通过包装盒装饰的方式给对象做一些增强的功能。注重对对象的功能扩展
参考文章: