概念
- 属于创建型模式;
- 防止反复创建和回收对象实例,减轻gc 负担
- 正常使用时, 饿汉模式就可以;如果明确有懒加载的需求 可以使用内部类的方式;
- 枚举方式很好,就是大家不熟悉,用着别扭;而且为了单例弄出这么多概念来让人感觉生疏;
demo
package com.cn.go.designpattern;
public class Singleton {
public static void main(String[] args) {
System.out.println( InnerClassSingleton.getInstance().hashCode());
System.out.println( InnerClassSingleton.getInstance().hashCode());
}
}
class HungrySingleton {
private static final HungrySingleton instance = new HungrySingleton();
private HungrySingleton() {
}
public static HungrySingleton getInstance() {
return instance;
}
}
class LazySingleTon {
private static LazySingleTon instance;
private LazySingleTon() {
}
public static synchronized LazySingleTon getInstance() {
if (instance == null) {
instance = new LazySingleTon();
}
return instance;
}
}
class DCLSingleton {
private static volatile DCLSingleton instance;
private DCLSingleton() {
}
public static DCLSingleton getInstance() {
if (instance == null) {
synchronized (DCLSingleton.class) {
if (instance == null) {
instance = new DCLSingleton();
}
}
}
return instance;
}
}
class InnerClassSingleton {
private InnerClassSingleton() {
}
public static InnerClassSingleton getInstance() {
return InnerClassSingletonHold.INSTANCE;
}
private static class InnerClassSingletonHold {
private final static InnerClassSingleton INSTANCE = new InnerClassSingleton();
}
}
enum EnumSingleTon {
INSTANCE;
public static EnumSingleTon getInstance() {
return INSTANCE;
}
}