单例设计模式、构造原型设计模式、发布订阅设计模式、promise设计模式…
单例设计模式
//=>单例模式:把实现当前这个模块所有的属性和方法汇总到同一个命名空间下(分组作用,避免了全局变量的污染) let exampleRender=(function(){ //=>实现当前模块具体业务逻辑的方法全部存放在闭包中 let fn=function(){ //... } return { init:function(){ //=>入口方法:控制当前模块具体的业务逻辑顺序 fn(); } } })(); exampleRender.init();
真实项目中,我们如果想要实现具体的业务逻辑需求,都可以依托于单例模式构建;我们把项目划分成各大板块或者模块,把实现同一个板块的方法放在一个独立的命名空间下,方便团队协作开发;
构造原型模式:最贴近OOP面向对象编程思想的
以后真实项目中,不管是封装类库还是插件或者UI组件,基本上都是基于构造原型模式来开发的
class Tool{ constructor(){ this.isCompatible='addEventListener' in document;//=>如果不兼容返回FALSE(IE6~8) } //=>挂载到原型上的方法 css(){ //... } //=>挂载到普通对象上的方法 static distinct(){ //... } } class Banner extends Tool{ constructor(...arg){ super(); this.xxx=xxx; } //=>挂载到子类原型上的方法 bindData(){ this.css();//=>把父类原型上的方法执行(子类继承了父类,那么子类的实例就可以调取父类原型上的方法了) this.distinct===undefined;//=>子类的实例只能调取父类原型上的方法,以及父类给实例提供的私有属性方法, 但是父类做为普通对象加入的静态方法,子类的实例是无法调取的 (只有这样才可以调取使用:Tool.distinct()) } }
我有三个类 A/B/C ,我想让C继承A和B
class A{ ... } class B extends A{ ... } class C extends B{ ... }
发布订阅设计模式:观察者模式
i:不同于单例和构造,发布订阅是小型设计模式,应用到某一个具体的需求中:凡是当到达某个条件之后要执行N多方法,我们都可以依托于发布订阅设计模式管理和规划我们的JS代码
ii:我们经常把发布订阅设计模式嵌套到其它的设计模式中
promise设计模式
i:解决AJAX异步请求层级嵌套的问题
ii:它也是小型设计模式,目的是为了解决层级嵌套问题的,我们也会经常把它嵌套在其它的设计模式中运行
$.ajax({ url:'/A', async:true,//=>异步 success:function(result){ $.ajax({ url:'/B', async:true, success:function(){ //=>还会有后续嵌套 } }); } });