一、单例模式
保证一个特定的类,仅有一个实例,第二次new的时候,返回的是完全等于(===)的同一个实例。一般登录购物车都是一个单例。
应用场景:JQuery中的$、Vuex中的Store、Redux中的Store等
二、工厂模式
工厂模式就相当于创建实例对象的new,提供一个创建对象的接口。
应用场景:JQuery中的$、Vue.component异步组件、React.createElement等
三、装饰器模式
在不改变对象自身的基础上,动态的给某个对象添加新的功能,同时又不改变其接口。
应用场景:ES7装饰器、Vuex中1.0版本混入Vue时,重写init方法、Vue中数组变异方法实现等
四、观察者模式
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。
观察者模式是由具体目标调度的,观察者模式的订阅者与发布者之间是存在依赖的。目标和观察者是基类,目标提供维护观察者的一系列方法,观察者提供更新接口。具体观察者和具体目标继承各自的基类,然后具体观察者把自己注册到具体目标里,在具体目标发生变化时候,调度观察者的更新方法。
应用场景:JS事件、JS Promise、JQuery.$CallBack、Vue watch、NodeJS自定义事件,文件流等
---发布/订阅模式:订阅者把自己想订阅的事件注册到调度中心,当该事件触发时候,发布者发布该事件到调度中心(顺带上下文),由调度中心统一调度订阅者注册到调度中心的处理代码。
比如有个界面是实时显示天气,它就订阅天气事件(注册到调度中心,包括处理程序),当天气变化时(定时获取数据),就作为发布者发布天气信息到调度中心,调度中心就调度订阅者的天气处理程序。
五、迭代器模式
提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示