设计模式

单例模式

2018-01-17  本文已影响0人  jsjack_wang
1.传统懒汉模式
1.1 小栗子
public class LazySingletonPattern {

    private static LazySingletonPattern instance = new LazySingletonPattern();

    public static LazySingletonPattern getInstance() {
        return instance;
    }

    public void invokeMethod() {
        System.out.println("LazySingletonPattern invokeMethod");
    }
}
1.2 测试
@Test
public void testLazySingletonPattern() {
    LazySingletonPattern instance = LazySingletonPattern.getInstance();
    instance.invokeMethod();
}
2.对传统懒汉模式的优化
2.1 小栗子
public class EnhanceLazySingletonPattern {

    static class EnhanceLazySingletonPatternHolder {
        static EnhanceLazySingletonPattern INSTANCE = new EnhanceLazySingletonPattern();
    }

    public static EnhanceLazySingletonPattern getInstance() {
        return EnhanceLazySingletonPatternHolder.INSTANCE;
    }

    public void invokeMethod() {
        System.out.println("LazySingletonPattern invokeMethod");
    }
}
2.2 测试
@Test
public void testEnhanceLazySingletonPattern() {
    EnhanceLazySingletonPattern instance = EnhanceLazySingletonPattern.getInstance();
    instance.invokeMethod();
}
3.传统饥汉模式
3.1 小栗子
public class HungerSingletonPattern {

    private static HungerSingletonPattern instance = null;

    public static HungerSingletonPattern getInstance() {
        synchronized (HungerSingletonPattern.class) {
            if (instance == null) {
                instance = new HungerSingletonPattern();
            }
        }
        return instance;
    }

    public void invokeMethod() {
        System.out.println("LazySingletonPattern invokeMethod");
    }
}
3.2 测试
@Test
public void testHungerSingletonPattern() {
    HungerSingletonPattern instance = HungerSingletonPattern.getInstance();
    instance.invokeMethod();
}
4.传统饥汉模式的优化
4.1 小栗子
public class EnhanceHungerSingletonPattern {
    private static volatile EnhanceHungerSingletonPattern instance = null;

    public static EnhanceHungerSingletonPattern getInstance() {
        if (instance == null) {
            synchronized (EnhanceHungerSingletonPattern.class) {
                if (instance == null) {
                    instance = new EnhanceHungerSingletonPattern();
                }
            }
        }
        return instance;
    }

    public void invokeMethod() {
        System.out.println("LazySingletonPattern invokeMethod");
    }
}
4.2 测试
@Test
public void testEnhanceHungerSingletonPattern() {
    EnhanceHungerSingletonPattern instance = EnhanceHungerSingletonPattern.getInstance();
    instance.invokeMethod();
}
上一篇 下一篇

猜你喜欢

热点阅读