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();
}