设计模式速记-单例模式
1. 单例模式
单例模式属于创建型模式,顾名思义单例模式即“类仅有一个实例”,单例类负责创建自身对象,并且又要保证对象唯一。单例模式有如下几个要点:
- 单例类仅能有一个实例
- 唯一实例必须由单例类自身创建
- 单例类必须对外提供访问此单例对象的接口方法
2. 单例模式要点
单例模式是最简单的创建型模式之一,但是单例模式有一些问题需要注意,其中最重要的是线程安全问题。
在Java中为解决线程安全问题有如下两种方法,分别称为懒汉式单例模式和饿汉式单例模式。
-
懒汉式单例模式
懒汉式单例模式通过使用volatile关键字来限制单例对象,通过synchronized关键字来限制获取实例的方法。这样就解决了单例模式访问单例时的线程安全问题。
-
饿汉式单例模式
饿汉式单例模式在编写单例类的时候,在实例初始化的时候直接创建对象,这样就不存在线程安全问题。
3. 单例模式示例
-
懒汉式单例模式
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; } }
-
饿汉式单例模式
public class HungrySingleton { private static final HungrySingleton instance=new HungrySingleton(); private HungrySingleton(){} public static HungrySingleton getInstance() { return instance; } }