[设计模式]单例模式

单例模式

定义:一个类只有一个实例,并提供全局访问这个实例的接口。
用途:有一些类我们只需要一个对象实例,比如说:线程池、缓存、对话框、注册表、日志对象、充当打印机、显卡等设备驱动程序的对象。如果制造出多个实例就可能会导致一些问题的产生,比如:程序的行为异常、资源使用过量、或者不一致性的结果。

单例模式实现

  • 实现特点:
    • 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编辑  收藏  举报

导航