class
Singleton {
//私有,静态的类自身实例
private
static
Singleton instance =
new
Singleton();
//私有的造构子(造构器,造构函数,造构法方)
private
Singleton(){}
//公然,静态的厂工法方
public
static
Singleton getInstance() {
return
instance;
}
}
应用时
?
1
Singleton obj = Singleton.getInstance();
class
LazySingleton {
//初始为null,暂不实例化
private
static
LazySingleton instance =
null
;
//私有的造构子(造构器,造构函数,造构法方)
private
LazySingleton(){}
//公然,静态的厂工法方,须要应用时才去创立该单体
public
static
LazySingleton getInstance() {
if
( instance ==
null
) {
instance =
new
LazySingleton();
}
return
instance;
}
}
应用式方同上。var
Singleton = {
attr1 : 1,
attr2 :
'hello'
,
method1 :
function
(){alert(
this
.attr2);},
method2 :
function
(arg){}
}
种这式方中,象对有所成员都通过Singleton加点号问访。有所成员是公然的,没有私有的。在执行到变量Singleton时,会加载(实例化)自身,即非惰性加载。var
Singleton =
function
(){
var
attr = 1, fn =
function
(){};
return
{
method :
function
(){ fn(); },
getAttr :
function
(){
return
attr; }
};
}();
种这式方中var定义私有的成员属性attr,法方fn,然后返回一个公然的接口method和getAttr。后今改修实现时,接口法方method和getAttr变不,只要改修私有的attr和fn的体具实现。应用如下
?
1
2
Singleton.method();
Singleton.getAttr();
3,闭包实现私有成员的惰性实例化单体
?
var
LazySingleton =
function
(){
var
attr = 1, fn =
function
(){};
var
obj = {
method :
function
(){ fn(); },
getAttr :
function
(){
return
attr; }
};
function
init(){
return
obj;
}
return
{getInstace: init};
}();
实用合场下面已提到:对于那些必须加载大批数据的单体直到须要应用它的时候才实例化。应用式方是这样的
?
1
2
LazySingleton.getInstance().method();
LazySingleton.getInstance().getAttr();
4,又现发另一种
?
1
2
3
4
5
6
7
function
singleton() {
var
obj =
new
Object();
singleton =
function
() {
return
obj;
};
return
obj;
}
仅在第一次时会new,这个Object泛指自定义的有所类。
文章结束给大家分享下程序员的一些笑话语录:
面试官:熟悉哪种语言