深入理解JavaScript系列(25):设计模式之单例模式详解
介绍
从本章开始,我们会逐步介绍在JavaScript里使用的各种设计模式实现,在这里我不会过多地介绍模式本身的理论,而只会关注实现。OK,正式开始。
在传统开发工程师眼里,单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。在JavaScript里,单例作为一个命名空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象。
正文
在JavaScript里,实现单例的方式有很多种,其中最简单的一个方式是使用对象字面量的方法,其字面量里可以包含大量的属性和方法:
varmySingleton={ property1:"something", property2:"somethingelse", method1:function(){ console.log('helloworld'); } };
如果以后要扩展该对象,你可以添加自己的私有成员和方法,然后使用闭包在其内部封装这些变量和函数声明。只暴露你想暴露的public成员和方法,样例代码如下:
varmySingleton=function(){
/*这里声明私有变量和方法*/ varprivateVariable='somethingprivate'; functionshowPrivate(){ console.log(privateVariable); }
/*公有变量和方法(可以访问私有变量和方法)*/ return{ publicMethod:function(){ showPrivate(); }, publicVar:'thepubliccanseethis!' }; };
varsingle=mySingleton(); single.publicMethod(); //输出'somethingprivate' console.log(single.publicVar);//输出'thepubliccanseethis!'