[设计模式]单例模式
单例模式
定义:一个类只有一个实例,并提供全局访问这个实例的接口。
用途:有一些类我们只需要一个对象实例,比如说:线程池、缓存、对话框、注册表、日志对象、充当打印机、显卡等设备驱动程序的对象。如果制造出多个实例就可能会导致一些问题的产生,比如:程序的行为异常、资源使用过量、或者不一致性的结果。
单例模式实现
- 实现特点:
- 1 有一个私有的构造函数。
- 2 有一个私有的静态变量,作为类的唯一实例对象。
- 3 有一个公有的方法可以获得对象实例。
- 单例模式的两种实现方式
- 饿汉方式:指全局的单例实例在类装载时构建。
- 懒汉方式:指全局的单例实例在第一次被使用时构建。
饿汉方式示例(静态变量初始化时建的实例,所以保证了线程安全)
//饿汉方式
public class SingletonPattern {
private static SingletonPattern instance=new SingletonPattern();
private SingletonPattern() {}
public static SingletonPattern getInstance() {
return instance;
}
}
懒汉方式示例(加锁保证线程安全;双重检查+加锁保证只有第一次调用获得类的对象的方法getInstance时才同步,避免了之后调用getInstance的开销)
//懒汉方式
public class SingletonPattern {
private volatile static SingletonPattern instance;//volatile保证数据的可见性?
private SingletonPattern() {};
public SingletonPattern getInstance() {
if(instance==null) {
synchronized(SingletonPattern.class) {
if(instance==null) {
instance=new SingletonPattern();
}
}
}
return instance;
}
}
posted on 2019-07-29 23:01 coding_gaga 阅读(111) 评论(0) 编辑 收藏 举报