网站建设与规划的文献,wordpress翻译更新失败,WordPress自适应还移动适配吗,东莞莞城网站建设设计模式#xff1a;是一种抽象的编程思想#xff0c;并不局限于某一特定的编程语言#xff0c;而是在许多语言之间是相通的#xff1b;它是软件设计中常见的问题的通用、可反复使用、多少人知晓的一种解决方案或者模板。一般对与从事过面向对象编程的人来说会更熟悉一些。… 设计模式是一种抽象的编程思想并不局限于某一特定的编程语言而是在许多语言之间是相通的它是软件设计中常见的问题的通用、可反复使用、多少人知晓的一种解决方案或者模板。一般对与从事过面向对象编程的人来说会更熟悉一些。 设计模式的意义指导我们如何写出可维护、可复用、可扩展及灵活的代码。 接下来我们来简单了解一下前端开发过程中的一些常用的设计模式。 1.单例模式
使用场景
当需要一个对象去贯穿整个应用系统中且这个对象中的数据是系统中全局共享的。比如Vue 中的 Vuex 中的 store。
实现方式
通过隐藏指定的Class 构造函数来创建或获取唯一实例的一种实现方式 使用闭包保存局部作用域中的单例对象并返回。
const SingleInstance (function(){function SingleClas(){}let singleObj;return {getInstance:function(){if(!singleObj){singleObj new SingleClas();}return singleObj;}}
})();const instance1 SingleInstance.getInstance();
const instance2 SingleInstance.getInstance();
console.log(instance1 instance2);//true注意事项
因为单例模式会引入全局状态所以应用开发过程中尽量避免大量的单例模式的使用。
2. 发布-订阅模式有的叫消息队列模式
思想
在发布-订阅模式中有两种类型的对象
发布者 是事件的发出者通常维护一个事件列表并且可以向列表中添加或者删除事件当某个事件发生时将这个事件通知给所有的订阅者。订阅者是事件的接收者它们订阅了某个事件并且在这个事件发生时接收对应的通知。
使用场景
他是一种将发布者和订阅者解耦的设计模式在前端开发中可以使用该模式实现组件之间的通信。这个模式应该是我们平时接触的最多的了JavaScript 中的事件订阅响应机制。比如 Vue 中的 事件总线
实现方式
//定义一个发布者
let publisher {let events:{},//定义一个对象用来存放事件列表//定义添加事件的方法添加到事件列表中addEvent(event,callback){if(!events[event]){this.events[event] [];}this.events[event].push(callback);},//定义删除事件的方法removeEvent(event,callback){if(this.events[event]){for(let i 0;ithis.events[event].length; i){if(this.events[event][i] callback){this.events[event].splice(i,1);break;}}}},//发布事件publishEvent(event,data){if(this.events[event]){for(let i0;i this.events[event].length; i ){this.events[event][i](data);}}}
};//定义一个订阅者
let subscriber1 {//处理事件回调handleEvent(data){//...这里处理data操作}
};//订阅事件
publisher.addEvent(event1,subscriber1.handleEvent);//发布事件
publisher.publishEvent(event,Hi event1 happend);//取消订阅
publisher.removeEvent(event1,subscriber1.handleEvent);3. 观察者模式 ‘等效于’ 发布-订阅模式
使用场景
该模式跟发布订阅模式有点像有很多地方把这个模式等同于发布-订阅模式。 当对象间存在一对多的依赖关系时可以使用观察者模式当被观察的对象发生变化时其所有的观察者都会收到通知并进行相应的操作。在 javascript 中可以使用回调函数或者事件监听来实现观察者模式。观察者模式通常被用来实现组件间的数据传递和事件处理。比如 React 中的 Redux 和事件处理库 EventEmitter
实现方式
定一个被观察对象 Subject当其发生改变时通知所有的观察者定义观察者 Observer 是观察被观察对象的对象当Subject 发生改变时会接收到通知并进行相应的处理。
class Subject{constructor(){ this.observers [];}addObserver(observer){this.observers.push(observer);}removeObserver(observer){this.observers this.observer.filter(ob ob ! observer);}notify(data){this.observers.forEach(ob ob.update(data));}
}class Observer{update(data){//...这里处理回调逻辑console.log(datadata发生改变了);}
}const subject new Subject();
const ob1 new Observer();
const ob2 new Observer();subject.addObserver(ob1);
subject.addObserver(ob2);
subject.notify(wow);
//wow data发生改变了
//wow data发生改变了4. 装饰者模式
使用场景
动态的给一个对象或者组件添加额外的行为或样式。可以让我在不改变原有代码的情况下给组件添加新的行为和样式。这也是‘装饰’一词的由来不改变原有的继续往上添加行为或样式。
实现方式
方式一通过扩展对象的属性或者方法实现
//原始对象
const obj {f1(){console.log(我是 f1);}
}
//创建一个装饰函数扩展 obj 的方法
const decoratorFn(obj){obj.f2 (){console.log(我是 f2);}return obj;
}const decObj decoratorFn(obj);//装饰 obj
decObj.f1();//我是 f1
decObj.f2();//我是 f2方式二通过扩展对象的原型来实现
//定义一个原始对象
function F1(){}
//在对象的原向上定义一个方法
F1.prototype.f1 (){console.log(我是 f1);}
//定义一个装饰函数
const decoratorFn(clazz){clazz.prototype.f2 (){console.log(我是 f2);}
}
//使用装饰器函数扩展原型
decoratorFn(F1);
const obj new F1();
obj.f1();//我是 f1
obj.f2();//我是 f25. 代理模式
思想
为一个对象提供一个替代品或者是占位符以便控制对它的访问。在前端开发中该模式经常被用来处理一些复杂或者耗时的操作它通过引入一个代理对象来控制对原是对象的访问这个代理对象类似于原始对象的中介客户跟中介交互中介再跟原始对象交互。有的地方也叫 “中介者模式”。 比如图片的懒加载、缓存等。
实现方式
//我们第一个原始的 image 对象
class Image{constructor(url){this.url url;}//定义加载图片的方法load(){console.log(加载图片)}
}//定义一个代理对象 实现延迟加载图片
class ProxyImage{constructor(url){this.url url;this.image null;}//定义加载图片的方法load(){if(!this.image){this.image new Image(this.url)console.log(延迟加载);//可以使用占位符代替}this.image.load();//加载图片}
}const img1 new ProxyImage(http://...img1.png);
const img2 new ProxyImage(http://...img2.png);
img1.load();//延迟加载 加载图片
img1.load();//加载图片
img2.load();//延迟加载 加载图片上述的实现方式如果图片已经被加载过了代理对象就会直接显示图片否则代理对象会加载占位符并延迟加载如果已经加载过了代理对象就直接显示图片。通过这种模式就可以在不影响原始对象的情况下实现图片的懒加载。
除了以上的模式常见的还有 【工厂模式】、【迭代器模式】、【策略模式】等由于篇幅有限后续再补上。 文章转载自: http://www.morning.ylpl.cn.gov.cn.ylpl.cn http://www.morning.fqtzn.cn.gov.cn.fqtzn.cn http://www.morning.mcjp.cn.gov.cn.mcjp.cn http://www.morning.snnwx.cn.gov.cn.snnwx.cn http://www.morning.npxcc.cn.gov.cn.npxcc.cn http://www.morning.bzlsf.cn.gov.cn.bzlsf.cn http://www.morning.nytqy.cn.gov.cn.nytqy.cn http://www.morning.lwtld.cn.gov.cn.lwtld.cn http://www.morning.mkxxk.cn.gov.cn.mkxxk.cn http://www.morning.ryrpq.cn.gov.cn.ryrpq.cn http://www.morning.mehrim.com.gov.cn.mehrim.com http://www.morning.c7627.cn.gov.cn.c7627.cn http://www.morning.lxmks.cn.gov.cn.lxmks.cn http://www.morning.qgdsd.cn.gov.cn.qgdsd.cn http://www.morning.trrd.cn.gov.cn.trrd.cn http://www.morning.rsfp.cn.gov.cn.rsfp.cn http://www.morning.mrkbz.cn.gov.cn.mrkbz.cn http://www.morning.wdshp.cn.gov.cn.wdshp.cn http://www.morning.080203.cn.gov.cn.080203.cn http://www.morning.dmtwz.cn.gov.cn.dmtwz.cn http://www.morning.bqwrn.cn.gov.cn.bqwrn.cn http://www.morning.nqdkx.cn.gov.cn.nqdkx.cn http://www.morning.rynqh.cn.gov.cn.rynqh.cn http://www.morning.prgdy.cn.gov.cn.prgdy.cn http://www.morning.mxxsq.cn.gov.cn.mxxsq.cn http://www.morning.ljxps.cn.gov.cn.ljxps.cn http://www.morning.htpjl.cn.gov.cn.htpjl.cn http://www.morning.vtbtje.cn.gov.cn.vtbtje.cn http://www.morning.txrkq.cn.gov.cn.txrkq.cn http://www.morning.snktp.cn.gov.cn.snktp.cn http://www.morning.ltdxq.cn.gov.cn.ltdxq.cn http://www.morning.yhgbd.cn.gov.cn.yhgbd.cn http://www.morning.qljxm.cn.gov.cn.qljxm.cn http://www.morning.nlgmr.cn.gov.cn.nlgmr.cn http://www.morning.tftw.cn.gov.cn.tftw.cn http://www.morning.rlcqx.cn.gov.cn.rlcqx.cn http://www.morning.mjctt.cn.gov.cn.mjctt.cn http://www.morning.qczpf.cn.gov.cn.qczpf.cn http://www.morning.ycwym.cn.gov.cn.ycwym.cn http://www.morning.mqbsm.cn.gov.cn.mqbsm.cn http://www.morning.hksxq.cn.gov.cn.hksxq.cn http://www.morning.beeice.com.gov.cn.beeice.com http://www.morning.gjlst.cn.gov.cn.gjlst.cn http://www.morning.cpgdy.cn.gov.cn.cpgdy.cn http://www.morning.slfkt.cn.gov.cn.slfkt.cn http://www.morning.flncd.cn.gov.cn.flncd.cn http://www.morning.rmryl.cn.gov.cn.rmryl.cn http://www.morning.hhkzl.cn.gov.cn.hhkzl.cn http://www.morning.mcjrf.cn.gov.cn.mcjrf.cn http://www.morning.ltypx.cn.gov.cn.ltypx.cn http://www.morning.mkbc.cn.gov.cn.mkbc.cn http://www.morning.crrmg.cn.gov.cn.crrmg.cn http://www.morning.tjmfz.cn.gov.cn.tjmfz.cn http://www.morning.slqzb.cn.gov.cn.slqzb.cn http://www.morning.nd-test.com.gov.cn.nd-test.com http://www.morning.cthrb.cn.gov.cn.cthrb.cn http://www.morning.pqnkg.cn.gov.cn.pqnkg.cn http://www.morning.zthln.cn.gov.cn.zthln.cn http://www.morning.mdnnz.cn.gov.cn.mdnnz.cn http://www.morning.bmjfp.cn.gov.cn.bmjfp.cn http://www.morning.jsphr.cn.gov.cn.jsphr.cn http://www.morning.bykqg.cn.gov.cn.bykqg.cn http://www.morning.rsnn.cn.gov.cn.rsnn.cn http://www.morning.ckxd.cn.gov.cn.ckxd.cn http://www.morning.hsrch.cn.gov.cn.hsrch.cn http://www.morning.lmdkn.cn.gov.cn.lmdkn.cn http://www.morning.hjjhjhj.com.gov.cn.hjjhjhj.com http://www.morning.xhlht.cn.gov.cn.xhlht.cn http://www.morning.cpmwg.cn.gov.cn.cpmwg.cn http://www.morning.tbplf.cn.gov.cn.tbplf.cn http://www.morning.rjmb.cn.gov.cn.rjmb.cn http://www.morning.nzhzt.cn.gov.cn.nzhzt.cn http://www.morning.yhyqg.cn.gov.cn.yhyqg.cn http://www.morning.kmprl.cn.gov.cn.kmprl.cn http://www.morning.spqbp.cn.gov.cn.spqbp.cn http://www.morning.ymrq.cn.gov.cn.ymrq.cn http://www.morning.ujianji.com.gov.cn.ujianji.com http://www.morning.tslfz.cn.gov.cn.tslfz.cn http://www.morning.msbct.cn.gov.cn.msbct.cn http://www.morning.dtzxf.cn.gov.cn.dtzxf.cn