要素
- 私有构造方法
- 私有的静态引用指向自己的实例
- 以自己实例为返回值的共有静态方法
单例模式优点
- 节约系统资源,避免重复实例频繁创建
- 提供了对唯一实例的受控访问
单例模式缺点
- 不使用于变化的对象
- 没有抽象层,扩展性不好
使用场景
- 频繁创建并且频繁销毁的对象
- 创建对象耗时长且资源占用大,又经常用的到的对象
单例模式实现
饿汉式单例-线程安全
public class singletonTest {
private static singletonTest single = new singletonTest();
//构造器需要私有化
private singletonTest(){};
public static singletonTest getInstance(){
return single;
}
}
懒汉式单例-线程不安全
public class singletonTest {
public static singletonTest single = null;
//构造器需要私有化
private singletonTest(){};
public static singletonTest getInstance(){
if (single == null){
single = new singletonTest();
}
return single;
}
}
这里待补充一个解决线程问题的懒汉式单例
//todo
总结
- 当一个类的对象只需要或只可能有一个时,可以考虑使用单例
- 如果一个类的实例应该在jvm初始化时被创建出来,应该考虑使用饿汉式单例
- 如果一个类是实例不需要预先被创建,也许这个类的实例不一定能用的上,或创建成本较大,考虑懒汉式单例
- 切记使用懒汉式单例时,需要考虑到线程安全问题