js设计模式

tech2023-10-16  95

详解参考 ① 工厂模式:去做同样的事情,实现同样的效果,解决多个相似的问题这时候需要使用工厂模式

function CreatePerson(){ var obj = new Object(); obj.name = name; obj.age = age; obj.sayName = function(){ return this.name; } return obj; } var p1 = new CreatePerson("Bob",28); var p2 = new CreatePerson("Tom",25);

② 单体模式:一个用来划分命名空间并将一批属性和方法组织在一起的对象,如果它可以被实例化,那么它只能被实例化一次。

var Singleton = function(name){ //单体模式 this.name = name; this.instance = null; } Singleton.prototype.getName = function(){ return this.name; } function getInstance(name){ //获取实例对象 if(!this.instance){ this.instance = new Singleton(name); } return this.instance; } //测试单体模式 var a = getInstance("Bob"); var b = getInstance("Tom"); console.log(a); //输出:Singleton {name: "Bob", instance: null} console.log(b); //输出:Singleton {name: "Bob", instance: null} console.log(a === b); //输出:true

③ 模块模式以对象字面量的方式来创建单体模式,为单体模式添加私有变量和私有方法能够减少全局变量的使用。使用场景:如果我们必须创建一个对象并以某些数据进行初始化,同时还要公开一些能够访问这些私有数据的方法,那么我们这个时候就可以使用模块模式了。

var singleMode = (function(){ var privateNum = 112; //创建私有变量 function privateFunc(){ //实现自己业务逻辑的代码 } //返回一个对象包含公有方法和属性 return { publicMethod1:publicMethod1, publicMethod2:publicMethos1, } })()

④ 代理模式:代理是一个对象,它可以用来控制对本体对象的访问,它与本体对象实现了同样的接口,代理对象会把所有的调用方法传递给本体对象的;代理模式最基本的形式是对访问进行控制,而本体对象则负责执行所分派的那个对象的函数或者类,简单的来讲本地对象注重的去执行页面上的代码,代理则控制本地对象何时被实例化,何时被使用;

//比如现在京东ceo想送给奶茶妹一个礼物,但是呢假如该ceo不好意思送,或者由于工作忙没有时间送, //那么这个时候他就想委托他的经纪人去做这件事 var TeaAndMilkGirl = function(name) { // 先申明一个奶茶妹对象 this.name = name; }; var Ceo = function(girl) { // 这是京东ceo先生 this.girl = girl; this.sendMarriageRing = function(ring) { // 送结婚礼物 给奶茶妹 console.log("Hi " + this.girl.name + ", ceo送你一个礼物:" + ring); } }; var ProxyObj = function(girl){ // 京东ceo的经纪人是代理,来代替送 this.girl = girl; this.sendGift = function(gift) { // 经纪人代理送礼物给奶茶妹 (new Ceo(this.girl)).sendMarriageRing(gift); // 代理模式负责本体对象实例化 } }; // 初始化 var proxy = new ProxyObj(new TeaAndMilkGirl("奶茶妹")); proxy.sendGift("结婚戒"); // Hi 奶茶妹, ceo送你一个礼物:结婚戒

⑤ 职责链模式: 消除请求的发送者与接收者之间的耦合。职责链是由多个不同的对象组成的,发送者是发送请求的对象,而接收者则是链中那些接收这种请求并且对其进行处理或传递的对象。请求本身有时候也可以是一个对象,它封装了和操作有关的所有数据。 ⑥ 命令模式:命令模式中的命令指的是一个执行某些特定事情的指令。命令模式使用的场景有:有时候需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道请求的操作是什么,此时希望用一种松耦合的方式来设计程序代码;使得请求发送者和请求接受者消除彼此代码中的耦合关系。 ⑦ 模板方法模式:模板方法模式由二部分组成,第一部分是抽象父类,第二部分是具体实现的子类,一般的情况下是抽象父类封装了子类的算法框架,包括实现一些公共方法及封装子类中所有方法的执行顺序,子类可以继承这个父类,并且可以在子类中重写父类的方法,从而实现自己的业务逻辑。 ⑧ 策略模式:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。优点:

策略模式利用组合,委托等技术和思想,有效的避免很多if条件语句。策略模式提供了开放-封闭原则,使代码更容易理解和扩展。策略模式中的代码可以复用。

⑨ 发布-订阅者模式:发布—订阅模式又叫观察者模式,它定义了对象间的一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知。 ⑩ 中介者模式:中介者模式的作用是解除对象与对象之间的耦合关系,增加一个中介对象后,所有的相关对象都通过中介者对象来通信,而不是相互引用,所以当一个对象发送改变时,只需要通知中介者对象即可。中介者使各个对象之间耦合松散,而且可以独立地改变它们之间的交互。

最新回复(0)