单例模式的条件
- 最多只有一个实例
- 实例的生命周期足够长:如果临时使用一次,使用new就可以
单例模式的优点
- 保证了最多只有一个实例
- 减少了内存开支
- 减少了一个对象频繁创建销毁带来的开销
- 在系统中有一个全局的访问点
单例模式的类图
单例模式的四种实现
饿汉式
public class Singleton1 { private static final Singleton1 sInstance = new Singleton1(); private Singleton1() { } public static Singleton1 getInstance() { return sInstance; } }
懒汉式
public class Singleton2 { private static Singleton2 sInstace = null; private Singleton2() { } public synchronized Singleton2 getInstance() { return sInstace; } }
双重检查式
public class Singleton3 { private static Singleton3 sInstance; private Singleton3() { } public static Singleton3 getInstance() { if (sInstance == null) { synchronized (Singleton3.class) { if (sInstance == null) { sInstance = new Singleton3(); } } } return sInstance; } }
静态内部类式
public class Singleton4 { private Singleton4() { } public static Singleton4 getInstance() { return SingleHolder.sInstance; } private static class SingleHolder { private static final Singleton4 sInstance = new Singleton4(); } }