設計模式學習 單例模式

2021-08-20 08:37:08 字數 1575 閱讀 3805

概念

單例模式singleton也是一種用於建立物件的設計模式

單例模式用於乙個單一的類,讓這個類自己負責建立自己的例項物件,並對外提供乙個訪問該例項物件的方法

單例模式有多種型別,包括餓漢式、懶漢式(分執行緒安全和執行緒不安全)、雙重驗證、靜態內部類、列舉單例

特點

單例類只能有乙個例項,這個例項只能由類自身建立

單例類必須對外提供乙個能夠獲取這個例項的方法

懶漢式是在呼叫獲取例項的方法時建立例項

餓漢式實在編譯時建立例項,呼叫獲取例項的方法時可以立即返回已建立好的例項

使用場景

某個類僅用於操作其他物件或檔案,並且這個類的例項會頻繁的被建立和銷毀,比如對資料庫的讀寫操作輔助類,需要讀寫資料庫時例項乙個物件,讀寫完成後銷毀這個物件。當資料庫的操作很頻繁時,就會頻繁地開啟和關閉資料庫,容易出現「鎖表」,並且容易發生資料讀寫不同步的問題。如果使用單例模式,所有對資料庫的操作都基於同乙個操作物件,只需要開啟一次資料庫,對資料庫的讀寫操作將會依次進行,即提高了效率又減少了消耗。

懶漢式和餓漢式之間推薦使用餓漢式,餓漢式的執行效率較高

需要懶載入時應該用靜態內部類實現單例模式

**示例

乙個最簡單的懶漢式(執行緒不安全)

public class singletonobject 

return sinstance;

}//構造方法私有,不允許外部建立例項物件

private singletonobject()

}

乙個最簡單的餓漢式

public class singletonobject 

//構造方法私有,不允許外部建立例項物件

private singletonobject()

}

執行緒安全的懶漢式

//外部獲取例項物件的方法

//使用synchronized修飾符,防止不同執行緒同時呼叫這個方法

public static synchronized singletonobject getinstance()

return sinstance;

}

//外部獲取例項物件的方法

//使用synchronized修飾符,防止不同執行緒同時呼叫這個方法

public static synchronized singletonobject getinstance()}}

return sinstance;

}

靜態內部類,在內部類中以常量的形式來儲存例項物件,使得物件唯一且不可變,實現了執行緒安全

//儲存物件例項的靜態內部類

private static class singletonholder

public singletonobject getinstance()

以上就是單例模式的幾種常用的實現方式,列舉實現在實際的開發中基本不會使用,在此不再舉例介紹

學習設計模式 單例模式

適用於 優點 缺點 1.懶漢式 public class singleton public static synchronized singleton getinstance return uniqueinstance 2.餓漢式 public class singleton public stat...

設計模式學習 單例模式

單例模式是一種常用的軟體設計模式。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。1.單例模式特點 2.單例模式作用 3.單例模式種類 a.餓漢式 b.懶漢式 c.懶漢式 ...

學習設計模式( ) 單例模式

定義 確保乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。型別 建立類模式 單例模式應該是23種設計模式中最簡單的一種模式了。它有以下幾個要素 單例模式現在主流推薦第一種雙重檢查型。以前流行的有根據例項化物件時機的不同有分為兩種 一種是餓漢式單例,一種是懶漢式單例。餓漢式單例在單例類被載...