Singleton:僅僅被實(shí)例化1次的類.
Java 1.5 之前,有兩種方法實(shí)現(xiàn)Singleton:
1 私有構(gòu)造器 -- 公有靜態(tài)成員是final域:
//Singleton with public final field
public class Elvis {
public static final Elvis INSTANCE = new Elvis();
private Elvis() { ... }
public void leaveTheBuilding() { ... }
}
2 私有構(gòu)造器 -- 公有的成員是個(gè)靜態(tài)工廠方法:
//Singleton with static factory
public class Elvis {
private static final Elvis INSTANCE = new Elvis();
private Elvis() { ... }
public static Elvis getInstance() { return INSTACE; }
public void leaveTheBuilding() { ... }
}
在JAVA 1.5 版本起,實(shí)現(xiàn)Singleton 還有第三種方法: 包含單個(gè)元素的枚舉類型:
3 枚舉類型
// Enum singleton - the preferred approach
public emun Elvis {
INSTANCE;
public void leaveTheBuilding() { ... }
}
枚舉類型在功能上和公有域方法相近,但寫法上更簡(jiǎn)潔,且無(wú)償提供了序列化機(jī)制,絕對(duì)防止多次實(shí)例化.
單元素的枚舉類型已經(jīng)成為實(shí)現(xiàn)Singleton的最佳方法