看了许多写设计模式的各类文章,发现大佬们仅仅是讲述各种设计模式的原理、特征、实现方式,但是对于其应用却只字不提,所以打算就自己掌握的知识,浅讲一下各种设计模式的实际应用场景。
关于单例模式
本文要说的是 单例模式,百度百科 的描述是通过单例模式的方法创建的类在当前进程中只有一个实例。
在ES6 出现之前, JS 的类不是一个很强的概念,而 JS 通常只在一个线程里运行,所以百科的描述对 JS 的单例而言,并不准确。
JS 的单例应该视作初始化后不被修改的变量,如此看来,其实单例模式是 JS 里应用最广泛的设计模式使用 CDN 引入的所有库文件的入口都是单例,比如大名鼎鼎的 jQuery
。
所以那些将讲设计模式的文章提到的各种单例模式的实现,基本都是画蛇添足,让许多前端人一头雾水。
单例模式的应用
单例模式的应用场景有两种:
- 需要对页面资源进行统一调度。最典型的就是弹窗,单个弹窗当然没问题,但如果用户还没看清第一个弹窗的时候,第二个弹窗又来了,两个弹窗不管是覆盖还是叠加,体验都是极为糟糕的,这种时候就应该将所有弹窗放到一个单例下进行管理。
-
需要复用对象以节约资源。比如使用
webSocket
与后台通信的时候。webSocket 虽然使用方便,但是多个 webSocket 连接会占用大量的服务端资源,因此,一个页面内绝对不能初始化多个接口相同的 webSocket。最好的实现是:同一个浏览器内不管有多少页面,都共享同一个连接,不过,维持连接的页面关闭的时候,其他页面需要及时发起新的连接来保持通信,这样的功能需要后端的支持才能达到。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。