什么是单例模式
单例模式的优缺点
优点
只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。
单例模式可以避免对资源的多重占用,例如一个写文件动作,由于只有一个实例存在 内存中,避免对同一个资源文件的同时写操作。
单例模式可以在系统设置全局的访问点,优化和共享资源访问,例如可以设计一个单 例类,负责所有数据表的映射处理。
缺点
单例模式的实现
懒汉式
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
饿汉式
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton (){}
public static Singleton getInstance() {
return instance;
}
}
双重校验锁
public class Singleton {
private volatile static Singleton singleton;
private Singleton (){}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
匿名内部类/静态内部类
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
总结
单例模式的实现虽然很简单,但是也要确保实现的性能和线程安全的问题。
单例模式的实现主流的就是以上介绍的几种,分别是懒汉式线程不安全、懒汉式线程安全、饿汉式、双重校验锁的实现、静态内部类的实现。这几种方式各有优缺点,陈某推荐使用静态内部类的实现方式。
单例模式也是Spring使用的一种设计模式,保证了Bean的单实例才能管理和监控Bean的创建和销毁。