单例设计模式(Singleton Design Pattern
)理解起来非常简单。一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。
定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
单例模式结构图如下:
Client
为客户端,Singleton
为单例类,Client
通过调用Singleton.getInstance()
方法获取实例对象。
下面介绍常见的6种单例写法:
饿汉式
饿汉式的实现方式比较简单。在类加载的时候,instance
静态实例就已经创建并初始化好了,所以,instance
实例的创建过程是线程安全的。不过,这样的实现方式不支持延迟加载(在真正用到 instance
的时候,再创建实例),从名字中我们也可以看出这一点。具体的代码实现如下所示:
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
}
采用饿汉式实现方式,将耗时的初始化操作,提前到程序启动的时候完成,这样就能避免在程序运行的时候,再去初始化导致的性能问题。
懒汉式(线程不安全)
有饿汉式,对应的,就有懒汉式。懒汉式相对于饿汉式的优势是支持延迟加载。具体的代码实现如下所示:
public class Singleton {
private static