单例模式的实现由很多种,都是为了保证在运行环境中只有该类的一个实例存在,为其他对象提供服务。
比如:工具类,配置类,线程池等。
常见的实现由两种,
// 懒汉式(延迟加载模式),初始时没有创建对象的实例,只有在调用getInstance方法时,才创建实例。
public class Single{
//声明私有该类的实例,并且为静态
private static Single instance;
//私有默认构造函数,外部无法直接构造该对象
private Single(){}
//对外提供获取实例的静态方法, (该方法是线程不安全的,可加synchronized锁使线程安全)。
public static Single getInstance(){
//实例为空时,创建该类的实例
if(instance == null){
instance = new Single();
}
return instance;
}
}
// 饿汉式,初始时即创建静态实例
public class Single{
//创建私有的该类静态实例
private static Single instance = new Single();
//私有构造函数
private Single(){}
//对外提供获取实例的静态方法
public static Single setInstance(){
return instance;
}
}
第三种:静态内部类获取方式
public class Single{
//私有构造函数
private Single(){}
//内部类持有该对象的实例
private static class SingletonHolder(){
static Single instance = new Single();
}
// 公有获取实例的静态方法
public static Single getInstance(){
reuturn SingletonHolder.instance;
}
}