標籤:
一個正常的餓漢單例模式
//CEO,餓漢單例模式
public class CEO extends Staff{
private static final CEO mCeo = new CEO();
//建構函式私人
private CEO(){
}
//公有的靜態函數,對外暴露擷取單例對象的介面
public static CEO getCeo(){
return mCeo;
}
@Override
public void work(){
//管理VP
}
}
這種最簡單的單例模式存在資源消耗、安全執行緒等問題,所以正常開發過程中並不推薦使用這種單例模式。
常見的單例模式還有DCL方式的單例模式、靜態內部類單例模式,但這些都會出現還原序列化時重新建立對象的問題。
以上單列模式避免對象在被還原序列化時重建對象,那麼必須加入這個方法:
private Object readResolve() throws ObjectSteamException{
return sInstance;
}
下面介紹兩種Android項目中常用的單例模式的實現:
枚舉單例
public enum SingletonEnum{
INSTANCE;
public void doSomething(){
System.out.println("do.sth.");
}
}
使用容器實現單例模式
public class SingletonManager{
private static Map<String,Object> objMap = new HashMap<String,Object>();
private SingletonManager(){
}
public static void registerService(String key,Object instance){
if(!objMap.containsKey(key)){
objMap.put(key,instance);
}
}
public static Object getService(String key){
return objMap.get(key);
}
}
單例模式的核心原理都是將建構函式私人化,並且通過靜態方法擷取一個唯一的執行個體。
兩種項目中可用的單例模式