单例模式就是一个类或者值能够被应用程序全局访问,并且始终是初始化创建的那个实例。单例模式是属于创建模式的范畴,它比较简单,但是,需要注意几个细节。
class DreamFactory{
//lazy instantiation
private static DreamFactory dream = null;
protected static DreamFactory getInstance(){
if(dream == null){
synchronized(DreamFactory.class){
return new DreamFactory();
}
}
return dream;
}
protected DreamFactory(){
System.out.println("Lazy instantiation ............");
}
}
public class Singleton {
public static void main(String []args){
// Miracle.getInstance();
DreamFactory.getInstance();
}
}
上面这个例子,采用了延迟初始化技术来创建单例。这种技术确保了单例在需要时才创建。另外, DreamFactory使用是protected 构造方法,这样确保了客户端不能实例化
DreamFactory。有几点需要注意:
这种实现方式不是线程安全的(修要加上synchronized才能保证去安全性)。另一种实现方式就比较简单、高效、线程安全。
class Miracle{
static Miracle miracle = new Miracle(); //early instantiation
protected static Miracle getInstance(){
return miracle;
}
Miracle(){
System.out.println("-----Change your mind and work for your dream------------");
}
protected void makeEffort(){
System.out.println("----Make a great effort for my dream----------");
System.out.println("----Never forget my dream for every moment------");
}
protected void persistInDoing(){
System.out.println("------Do it day and night------");
}
protected void study(){
System.out.println("------Study and overcome every difficulty-----------------");
}
}