GoF Definition: Ensure a class only has one instance, and provide a global point of access to it.
实现方式:
1.饿汉式
public class Singleton {
private static Singleton uniqueInstance = new Singleton();
private Singleton(){
}
public static synchronized Singleton getInstance(){
return uniqueInstance;
}
}
2.懒汉式
public class Singleton {
private static Singleton uniqueInstance = null;
private Singleton(){
}
public static synchronized Singleton getInstance(){
if(uniqueInstance == null){
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}
3.双重检查版
public class Singleton {
private volatile static Singleton instance = null;
private Singleton(){
//
}
public static Singleton getInstance(){
if(instance == null){
synchronized(Singleton.class){
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}
4.静态内部类实现
public class Singleton {
private static class SingletonHolder{
private static Singleton instance = new Singleton();
}
private Singleton(){
}
public static Singleton getInstance(){
return SingletonHolder.instance;
}
}
5.枚举实现
public enum Singleton {
uniqueInstance;
}
Exercise: 利用缓存实现某对象仅有3个实例
public class Three {
private final static String DEFAULT_PREKEY = "Cache";
private static Map<String,Three> map = new HashMap<String,Three>();
private static int num = 1;
private final static int NUM_MAX = 3;
private Three(){}
public static three getInstance(){
String key = DEFAULT_PREKEY+num;
Three three = map.get(key);
if(three==null){
three = new Three();
map.put(key, three);
}
num++;
if(num > NUM_MAX){
num = 1;
}
return three;
}
}