单例模式
确保一个类只有一个实例,并提供一个全局访问点。
- 往往用单个实例管理共享的资源,如数据库连接和线程池。
经典的单例模式实现:
public class Singleton{
private static Singleton uniqueInstance;
//静态的变量来记录Singleton类的唯一实例
private Singleton(){}
//私有构造器,只有类内部可以调用
public static Singleton getInstance(){//静态方法,返回实例
if( uniqueInstance==null )
uniqueInstance=new Singleton();
return uniqueInstance;
}
}
如果我们不需要这个实例,它就永远不会产生,这就是“延迟实例化”
特殊情况:
这种情况生成了两个实例!
解决方案1:
对getInstance()的性能要求不高
public static synchronized Singleton getInstance(){
.........//这个关键字要求每个线程在进入这个方法之前,要等待别的线程离开该方法
}
方案2:
不用延迟实例化的做法
private static Singleton uniqueInstance=new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return uniqueInstance;
}
(转载请注明出处 ^.^)