单子模式的设计思想是类得内部定义一个静态变量,当创建第一个实例时设置改变量. /_%>F5
应用程序直接使用这个静态变量指向的实例就可以了.为了防止应用程序调用构造器 _NhaW8E-
所以构造器必须为private cTc|Y@@
创建一个类满足: CB%[2i+
1.构造器私有 WY:S(aH
2.用一个私有静态变量引用实例 Yq0/nN{g6
3.提供一个共有,静态方法获得实例. 1sP^1CT}9n
Aa]0IY'7jp
静态 是为了在类加载时创建了 所需对象 Dd~'5tm:Z
而不用类创建对象. [)v |
------------------------------------------------------------------------------------------- 9Tn/yK5#K
Single.java
class Single N[P_y}ar
{ cnH9X)
private static Single s; r2@T.q?d
:-7q1c)s
private Single() //构造器定义为private Hfy2up(nl)
{ fruQj{{ <
} PK=STyz)
public static synchonized Single getInstance() kOJOp
{ /g'axPx T0
if (s==null) ;)aYlq:
s = new Single(); I< .)iOP
return s; d=[/R@Nj
} xs;n.=
}; q.$VrCc
Single2.javav
class Single2 /!;i>#K
{ 5E?}nw&$
private static Single2 s = new Single2(); //类加载时执行一次 s)~eVf
private Single2() //构造器定义为private c^li]RUm
{ 0z]o0= {
} YDs1}Lw-
public static Single2 getInstance() :HGY^W798
{ y[QUj "aC
return s; &$^>u S9
} 5(UBv3z-
};
/./如果有多个classloader,单子就可能不是单子了!!!
class Single3 {
private static s ;
private Single3(){
}
public static s getInstance(){
if(s==null){
synchonized(Single3.class){
if(s==null){
s = new Single3();
}
}
}
}
}
单子不可以继承,因为它的构造器是private!