一、单例模式:
单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
- 单例类只能有一个实例。
- 单例类必须自己创建自己的唯一实例。
- 单例类必须给所有其他对象提供这一实例。
1.1 饿汉式
1 2 3 4 5 6 7 8 9 10
| public class Singleton { private static Singleton singleton = new Singleton();
private Singleton() { }
public static Singleton getInstance() { return singleton; } }
|
1.2 重量级锁
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class Singleton { private static Singleton singleton;
private Singleton() { }
public static synchronized Singleton getInstance() { if (singleton == null) { singleton = new Singleton(); } return singleton; } }
|
1.3 双重锁检查
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public class Singleton {
private static volatile Singleton singleton;
private Singleton() { }
public static Singleton getInstance() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }
|
1.4 静态内部类方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class Singleton {
private Singleton() { }
private static class SingletonHolder { public static final Singleton singleton = new Singleton(); }
public static Singleton getInstance() { return SingletonHolder.singleton; } }
|
1.5 枚举类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| public class Singleton { private Singleton() {
}
private enum SingletonEm { INSTANCE;
private final Singleton instance;
SingletonEm() { instance = new Singleton(); }
public Singleton getInstance() { return instance; } }
public static Singleton getInstance() { return SingletonEm.INSTANCE.getInstance(); } }
|