可复用面向对象软件基础——设计模式(四)之单例模式
单例对象(Singleton)是一种常用的设计模式。在 Java 应用中,单例对象能保证在一个 JVM 中,该对象只有一个实例存在。 单例模式优势 某些类创建繁琐,对于一些大型对象,系统开销大 省去 new 操作符,降低系统内存使用频率,减轻 GC 压力 保证某些核心类独立控制系统整个流程(控制其不可实例多个) 简版单例类 public class Singleton { // 持有私有静态实例,防止被引用,此处赋值为null,目的为实现延迟加载 private static Singleton instance = null; // 私有构造方法,防止被实例化 private Singleton() { } // 静态工厂方法 public static Singleton getInstance() { if(instance == null) { instance = new Singleton(); } return instance; } // 如果该对象被用于序列化,可保证对象在序列化前后保持一致 public Object readResolve() { return instance; } } 这个类可以满足基本要求,但是,像这样毫无线程安全保护的类,如果我们把它放入多线程的环境下,肯定就会出现问题了,如何解决?我们首先会想到对 getInstance 方法加synchronized关键字,如下: // 静态工厂方法 public static synchronized Singleton getInstance() { if(instance == null) { instance = new Singleton(); } return instance; } 但是,synchronized 关键字锁住的是这个对象,这样的用法,在性能上会有所下降,因为每次调用 getInstance(),都要对对象上锁。...