单件模式:确保一个类只有一个实例,并提供一个全局访问点。
实现方式大致是让构造函数为private,添加一个static类型的全局变量作为唯一实例,用一个getInstance()函数获取这个唯一变量。
public class SingleComponentImmediate {
public static SingleComponentImmediate uniqueInstance = new SingleComponentImmediate();//直接声明,但会占用空间
private SingleComponentImmediate(){};
private SingleComponentImmediate getInstance(){
return uniqueInstance;
}
}
public class SingleComponentSynchronize {
public static SingleComponentSynchronize uniqueInstance;
private SingleComponentSynchronize(){};
public static synchronized SingleComponentSynchronize getInstance(){//synchronized使线程进入此方法前要等其它线程离开此方法,但会影响程序效率
if (uniqueInstance == null)
uniqueInstance = new SingleComponentSynchronize();
return uniqueInstance;
}
}
public class SingleComponentDoubleClock {
public volatile static SingleComponentDoubleClock uniqueInstanse;//volatile关键词确保:当uniqueInstance被初始化为SingleComponentDoubleClock时,多个线程正确处理它。
private SingleComponentDoubleClock(){};
public static SingleComponentDoubleClock getUniqueInstanse() {
if (uniqueInstanse == null){
synchronized (SingleComponentDoubleClock.class){//第二重锁
if (uniqueInstanse == null)
uniqueInstanse = new SingleComponentDoubleClock();
}
}
return uniqueInstanse;
}
}