JavaScript是一种弱类型、动态的、基于原型的语言,由于语言的特殊性使得我们在书写JavaScript代码时候感觉到非常容易,甚至我们用很简单的方式都能实现一些设计模式,接下来我来简单的介绍几种常见的设计模式并利用JavaScript代码来实现它们
一、单体模式
单体模式:一个特定类的多个实例对象都指向同一个实例对象。
在JavaScript中没有类只有对象,当你创建一个对象时候并不会有其他对象与其类似,所以当我们用字面量创建一个对象时,其实就是一个JavaScript的单体例子。由于JavaScript具有new语法可使用构造函数来创建对象,当需要用new语法创建实例对象时,每个实例对象指向的实例对象并不会是同一个实例对象,为了让其获得指向完全相同对象的新指针,我们可以有一下方法实现它:
1、采用私用静态成员模式实现单体模式,其方法就是重写构造函数:
2.采用立即执行函数包装实例和构造函数而实现
单体模式针对一个“类”仅创建一个对象,在javascript中所以的对象都是单体。在程序开发中的“单体”,指的是以模块模式创建的对象。
二、工厂模式
2、Object()或new Object()创建对象
工厂模式主要是根据字符串的类型在运行工厂函数时创建对象的方法。
三、迭代器模式
迭代器模式:提供一个API来遍历或者操纵复杂自定义的数据结构。在迭代器中一般包含数据结构的集合,迭代器模式提供一种简单的方式能够访问复杂的数据结构中的每个节点元素。实现方法如下:
这里只是一个简单的例子,在处理不同数据获取不同数据时,可以自定义获取数据的规则,以及加入一些利于数据获取的其他方法。
四、装修者模式
代码分析:Salary.decorators对象中写入各个方法,decorators_list数组保存添加属性名称,通过遍历decorators_list执行Salary.decorators对象中对应属性的getSalary方法,并把每次计算的salary值带入每次getSalary方法中,实现累加计算,最后返回salary
五、策略模式
策略模式:在代码运行时选择最优的策略(算法)去处理任务,在策略模式中常常运用到的场景在数据的验证上,创建一个验证器对象,验证器选择**的策略来处理任务,并且将具体的数据验证为他给适当的算法。下面用策略模式来写一个数据验证案例:
六、外观模式
外观模式:一种很普通的模式,通常把常用方法包装到一个特定的新方法种,提供一个可供选择的接口。实现外观模式可以让我的代码变得更加简洁,增强代码可读性,对于我们重新设计与重构工作非常有意义,接下来实现一个简单的外观模式:
七、代理模式
代理模式:通过包装一个对象以控制对它的访问,主要方法是将访问聚集为组或仅当正真要的时候才执行访问,从而避免了高昂的操作开销。这里介绍的代理模式并不是ES6中实现的proxy,主要是介绍模式的原理。代理模式理解很简单,就是我们有时候需要向服务器连续发生很多请求,这时候我们可以从中许多重复请求抽离成一个请求,然后在对服务器进行访问,服务器响应后通过回调proxy中的handler方法返回数据到请求端。
上面代码是伪代码,是无法真实运行的,只是模拟了代理过程。分析代码如下:
如果我们每次请求都需要通过obj.http传入id,连续传入不同id分别执行,不使用代理模式下,我们会在getData回调下拿到数据,但是每次执行obj.http我们都需要一次服务器的请求;如果我们使用proxy.makeRequire请求多次,此时proxy对象内部会在一段时间内对我们请求的id进行一次汇总,然后在进行服务器请求,服务器响应数据后,并通过getData进行返回数据。这就是代理模式的过程,避免了多次相似请求服务器额外的开销,并且在代理模式下我们可以设置缓存代理,(实现方法也很简单,例子中没有体现)将每次请求的数据进行保存在proxy.cache中,当有相关的请求一些静态资源时候,我们可以从缓存中取出相应数据进行响应,避免了再次请求服务器带来的开销。
八、中介者模式
中介者模式:指对象相互并不会直接通话,而是通过一个中介者对象进行通信,从而促成对象间的松散耦合,这种模式提高了代码的可维护性。下面举一个例子实现中介者模式,实现两个对象之间的通信:
在中介者模式下,中介者对象就是其他对象的载体,让相互对象不能直接获取到相互的信息,只有经过中介者才能散发信息,彼此的信息在没有经过中介者都是独立的,以上通过中介者模式实现了两个对象的相互的通信,其实解决办法也算勉强,接下来我们学习观察者模式,更加利于我们解决这些问题。
九、观察者模式
观察者模式:通过创建观察对象,当发生一个感兴趣的事件时可以将该事件告诉给所有的观察者,从而形成松散耦合,观察者模式广泛应用与浏览器事件中(比如鼠标的悬停、按键等),观察者模式别名也叫做订阅/发布模式。接下来我们通过案例来实现观察者模式。
由观察者模式和中介者模式可以看出,观察者和中介者模式非常相似,因为他们都是促进对象间的通信,同时又能使对象间松散耦合,但是它们在设计模式上存在一定的差异。中介者模式强调的是参与者彼此之间的交流,并且中介者必须先前知道所有的参与者;而观察者模式强调观察者改变成发布目标后对观察者进行统一的通讯,先前不需要知道自己由多少观察者,只知道发布事件,而观察者必须要知道发布目标。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/164386.html