要实现一个标准的单例模式并不复杂,无非是用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次获取该类的实例时,直接返回之前创建的对象。
<script type="text/javascript">
var Singleton = function(name){
this.name = name;
this.instance = null;
}
Singleton.prototype.getName = function() {
alert(this.name);
};
Singleton.getInstance = function(name) {
if (!this.instance) {
this.instance = new Singleton(name);
}
return this.instance;
}
var a = Singleton.getInstance('sven1');
var b = Singleton.getInstance('sven2');
alert(a == b);
</script>或者
<script type="text/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;
}
})();
</script>
这种实现方法,较为简单,但有一个问题就是,增加了这个类的不透明性,Singleton类的使用者必须知道这是一个单例类,跟以往通过new xxx 的方式来获取对象不同,这里偏要使用Singleton.getInstance来获取对象。

本文介绍了一种简单的单例模式实现方法,并提供了两种JavaScript示例代码。这种方法通过检查类实例是否存在来确保只创建一个对象。
1159

被折叠的 条评论
为什么被折叠?



