单例模式:
单例模式的目的就是希望一个类的实例在程序中只有一个;
代码:
1.饿汉式 不需要考虑线程安全的问题
class TestSingleton01{ // 构造器私有 private TestSingleton01() { } // 提供一个静态的变量, 或者一个静态方法 public static TestSingleton01 testSingleton01 = new TestSingleton01(); }
2. 懒汉式 需要考虑安全问题
class TestSingleton02{ // 构造器私有化 private TestSingleton02(){}; private static TestSingleton02 testSingleton02 = null; // 添加锁, 使用双重检测机制 // 也可以直接在方法上使用synchronized public static TestSingleton02 getInstance() { if(testSingleton02 == null) { synchronized (TestSingleton02.class) { if(testSingleton02 == null) { testSingleton02 = new TestSingleton02(); } } } return testSingleton02; } }
3. 使用枚举类创建单例对象;枚举类型可以避免序列化带来单例安全问题
enum EnumSingleton{ INSTANCE_TEST03; private TestSingleton03 testSingleton03; // jvm 保证只执行一次 EnumSingleton() { testSingleton03 = new TestSingleton03(); } public TestSingleton03 getInstance() { return testSingleton03; } } class TestSingleton03{ public static TestSingleton03 testSingleton03 = null; }