设计模式---单例模式
单例模式:
1、最常见的一种模式。在传统的开发中,单例模式就是保证一个类,只有一个实例。实现的方法是先判断是否存在该类的实例,如果不存在,则创建一个实例,如果存在,则直接返回实例。在传统开发工程师眼里,单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。在JavaScript里,单例作为一个命名空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象。
//常规方法:
var Singleton = (function() {
var instantiated;
function init() {
/*这里定义单例代码*/
//私有变量&方法
var privateVariable="something";
function showPrivate(){
console.log(privateVariable);
}
//公共接口:共有变量&共有方法
return {
publicMethod: function() {
console.log(privateVariable);
},
publicProperty: 'test'
};
}
return {
getInstance: function() {
if(!instantiated) {
instantiated = init();
}
return instantiated;
}
};
})();
/*调用公有的方法来获取实例:*/
Singleton.getInstance().publicMethod();
2、单例一般是用在系统间各种模式的通信协调上,下面的代码是一个单例的最佳实践:
var SingletonTester=(function (){
//传递给单例一个参数集合,若无,则为空。
function Singleton(args){
var args=args||{};
this.name="SingletonTester";
this.pointX=args.pointX||6;
this.pointY=args.pointY||10;
}
//实例容器
var instance;
var _static={
name:"SingletonTester",
//获取实例的方法
//返回Singleton的实例
getInstance:function(args){
if(instance===undefined){
instance=new Singleton(args);
}
return instance;
}
};
return _static;
})();
var singletonTest=SingletonTester.getInstance({pointX:5})
console.log(singletonTest.pointX); //5
浙公网安备 33010602011771号