Java—單例設計模式(餓漢單例,懶漢單例)和多例設計模式
阿新 • • 發佈:2018-11-15
1.單例模式
定義:一個類只允許產生一個例項化物件。
a.物件如何產生?
通過類的構造方法b.要想限制物件的產生?
通過構造方法限制,構造方法私有化,類外部無法產生例項化物件。
餓漢式單例:上來就new
//餓漢式單例 class Singleton{ //類內部提供例項化物件 private static final Singleton SINGLETON = new Singleton(); //構造方法私有化,類外部無法產生例項化物件 private Singleton(){} //物件方法 public static Singleton getSingleton(){ return SINGLETON; } }
懶漢式單例:用時在new(雙重加鎖單例模式)
class Singleton { private static final Singleton SINGLETON; private Singleton() {} // private宣告構造 private static Singleton getSingleton(){ if(SINGLETON == null){ // 表示此時還沒有例項化 SINGLETON = new Singleton(); } return SINGLETON; } }
2.多例模式(知道概念)——有限個數物件
所謂多例只是比單例多了一些例項化物件而已。之後我們會用列舉完全取代多例模式。
//多例——描述性別類 class Sex{ private String title; public static final int MALE_FLAG = 1; public static final int FEMALE_FLAG = 2; private static final Sex MALE = new Sex("男"); private static final Sex FEMALE = new Sex("女"); private Sex(String title){ this.title = title; } public static Sex getInstance(int flag) { switch (flag) { case MALE_FLAG: return MALE; case FEMALE_FLAG: return FEMALE; default: return MALE; } } @Override public String toString() { return this.title; } } public class Test{ public static void main(String[] args) { Sex male = Sex.getInstance(Sex.MALE_FLAG); Sex female = Sex.getInstance(Sex.FEMALE_FLAG); System.out.println(male); System.out.println(female); }