【设计模式】-创建型-1-单例模式
三个特点
- 单例类只有一个实例对象;
- 该单例对象必须由单例类自行创建;
- 单例类对外提供一个访问该单例的全局访问点;
实现模式1,懒汉模式。需要加关键字volatile 和 synchronized才能实现线程安全,加了之后有性能开销。
public class LazySingleton
{
private static volatile LazySingleton instance=null; //保证 instance 在所有线程中同步
private LazySingleton(){} //private 避免类在外部被实例化
public static synchronized LazySingleton getInstance()
{
//getInstance 方法前加同步
if(instance==null)
{
instance=new LazySingleton();
}
return instance;
}
}
实现模式2,饿汉模式。实例在类加载时就创建,线程安全。
public class HungrySingleton
{
private static final HungrySingleton instance=new HungrySingleton();
private HungrySingleton(){}
public static HungrySingleton getInstance()
{
return instance;
}
}
应用场景
- 数据库线程池
- 应用多线程线程池
- 操作系统中的文件系统、回收站、资源管理器
扩展
单例可以被扩展为有限多例模式