設計模式之單例模式

2021-07-31 15:12:09 字數 2389 閱讀 3490

設計模式之單例模式

單例模式(single pattern)定義:ensurena a class has only one instance, and provide a global point of access to it.(確保乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項)

通用類:

singleton類稱為單例類,通過使用private的建構函式,確保了在乙個應用中只產生乙個例項,並且是自行例項化的,**:

public class singleton 

//通過該方法獲得物件例項

public static singleton getsingleton()

//類中其它方法,盡量是static

public static void dosomething()

}

例子:

皇帝類

public class emperor 

public static emperor getinstance()

public static void say()

}

臣子類

單例模式優點:

1.在記憶體中只有乙個例項,減少記憶體開支,當乙個物件需要頻繁的建立銷毀時,並且建立或銷毀時效能又無法優化,單例模式的優勢就非常明顯;

2.單例模式只產生乙個例項,減少了系統開銷,當乙個物件的產生需要比較多的資源時,如讀取配置、產生其它依賴物件時,則可以通過在應用啟動時直接產生乙個單例物件,然後永久駐留記憶體來解決;

3.單例模式能夠避免對資源的多重占用,如乙個寫檔案動作,由於只有乙個例項在記憶體中,比面對同乙個資源檔案的同時讀寫操作;

4.單例模式可以在系統中設定全域性的訪問點,優化和共享資源訪問,例如可以設計乙個單例類,負責所有資料表的對映處理。

單例模式的缺點:

1.單例模式沒有介面,擴充套件極其困難,若要擴充套件,除了修改**基本沒有第二種方法;

2.單例模式是對測試不利的;

3.單例模式與單一職責有衝突。乙個類應該只實現乙個邏輯,而不關心它是否是單例的,是不是要單例取決於環境,單例模式把「要單例」和業務邏輯融合在乙個類中。

單例模式應用場景:

1.要求生成唯一序列號的環境;

2.在整個專案中需要乙個共享訪問點或共享資料,例如乙個web頁面上的計數器,可以不用把每次重新整理都記錄到資料庫中,使用單例模式保持計數器的值,並確保是執行緒安全的;

3.建立乙個物件需要消耗的資源過多,如要訪問io和資料庫等資源;

4.需要定義大量的靜態常量和靜態方法的環境。

非執行緒安全的單例模式

public class singleton 

//通過該方法獲得物件例項

public static singleton getsingleton()

return singleton;

} //類中其它方法,盡量是static

public static void dosomething()

}

單例模式的擴充套件

產生固定數量的皇帝

public class emperor {

//固定產生例項數量

private static int maxnumofemperor=2;

private static arraylistnamelist=new arraylist();

private static arraylistemperorlist=new arraylist();

//當前皇帝序號

private static int countnumofemperor=0;

//產生多有物件

static{

for(int i=0;i

大臣類

設計模式之單例模式

前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...

設計模式之單例模式

package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...

設計模式之 單例模式

單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式 單件模式 使用方法返回唯一的例項 public class singleton private static singleton instance public static singleton geti...