只有乙個例項
自行例項化(必須建立自己的唯一例項)
向整個系統提供這個例項
通俗一點的說就是,保證乙個類只有乙個例項,並且提供乙個訪問該例項的全域性訪問點。
單例模式主要是通過以下思路實現:
其中在提供私有的靜態屬性時就new例項,稱為餓漢式(餓了就吃), 在提供的公共的靜態方法中new例項,成為懶漢式(餓了才開始做)。
1.餓漢式單例:執行緒安全,呼叫效率高,不能延時載入
餓漢式:public class singleton
//靜態工廠方法,對於此方法的呼叫,都會返回同乙個物件引用
public static singleton getinstance()
}
2.懶漢式單例:執行緒不安全,呼叫效率不高,可以延時載入
懶漢式:private static singleton singleton = null;
private singleton()
public static singleton getsingleton()
return singleton;
}
注:同步鎖雖然解決了多個singleton物件問題,但每次呼叫getsingleton()方法都要同步,會導致允許效率低下。private static singleton singleton = null;
private singleton()
public static synchronized singleton getsingleton()
return singleton;
}
雙重檢測鎖式:private static singleton singleton = null;
private singleton()
public static singleton getsingleton() }}
return singleton;
}
靜態內部類式:private static class singletonclassinstance
private singleton()
public static singleton getsingleton()
列舉式:public enum singleton
}
說明:中國歷史上的皇帝通常僅有一人。為了保障其唯一性,古人採用玉璽等來進行防偽標識。更簡單的方法是限制皇帝的建立。比如,使用單例模式來保證皇帝的唯一性。
emperor類:
注意執行緒安全問題,可以自己思考以下改動(^u^)ノ~yopublic class emperor
public static emperor getemperor()
return emperor;
}}
單例模式的五種實現方式
1.最容易想到的方式 public class singleton public static singleton getinstance public static void main string args 優點是 簡單 缺點是 無論用沒用到instsnce,都會進行初始化。2.延遲載入 laz...
單例模式的五種實現方式
單例模式 無論在什麼時候,該類只有乙個例項。實現單例模式的要點就是提供乙個私有的無參建構函式。一 餓漢單例模式public class singleobject public static singleobject getinstance 二 懶漢單例模式 懶漢的意思就是慢悠悠的,不著急,也就是在呼...
單例設計模式 面試題
設計模式 必須對於多個程式使用同乙個配置資訊物件時,就需要保證其物件的唯一性 如何保證物件的唯一性 不允許其程式new建立物件 在該程式中建立乙個本類例項 對外提供乙個方法讓其他方法可以獲取該物件 2.步驟 私有化該 建構函式 通過new建立乙個在本類物件 定義乙個公有的方法,將建立物件返回.pub...