摘JavaScript设计模式与开发实践--单例模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了摘JavaScript设计模式与开发实践--单例模式相关的知识,希望对你有一定的参考价值。
本文章所有内容均摘自《javascript设计模式与开发实践》一书(有兴趣的可以购买),加入了一点点自己的理解,写这篇文章的目的是,加强自身对设计模式的理解,以及对于没有接触过这一块的入门者的参考。
阅读本章内容,需要具备Javascript面向对象的知识,否则阅读起来可能会些许困难。
设计模式
- 单例模式
- 策略模式
- 代理模式
- 迭代器模式
- 发布-订阅模式
- 命令模式
- 组合模式
- 模板方法模式
- 享元模式
- 职责链模式
- 中介者模式
- 装饰者模式
- 状态模式
- 适配器模式
单例模式
单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如线程池、全局缓存、浏览器中的window对象。在Javascript开发中,单例模式的用途也非常广泛。
试想下,当我们点击登录按钮的时候,页面中会出现一个登录浮窗,而这个登录浮窗是唯一的,无论单击多少次登录按钮,这个浮窗都只会被创建一次,那么这个登录浮窗就适合用单例模式来创建。
实现单例模式
要实现一个标准的单例模式并不复杂,无非是用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次获取该类的实例时,直接返回之前创建的对象。
var Singleton = function(name){ this.name = name; }; Singleton.prototype.getName = function(){ alert(this.name) }; Singleton.getInstance =(function(){ var instance = null; return function(name){ if(!instance){ instance = new Singleton(name); } return instance; } })() ; var a = Singleton.getInstance(‘tom‘); var b = Singleton.getInstance(‘jerry‘); console.log(a===b);//true
代码解释:
Singleton.getInstance 函数里面则是通过判断instance是否为空,如果为空的话,实例化Singleton类。这样可以保证这个类只会被实例化一次。
符合单例模式。
这种方式相对简单,但有一个问题,就是增加了这个类的"不透明性",Singleton类的使用者必须知道这是一个单例类,跟以往通过new XX的方式来获取对象不同,这里偏要使用Singleton.getInstance来获取对象。
实现透明的单例模式
以上是关于摘JavaScript设计模式与开发实践--单例模式的主要内容,如果未能解决你的问题,请参考以下文章