設計模式之單例設計模式 一)

2021-08-22 10:18:16 字數 1558 閱讀 3612

目錄

1.懶漢式

2.餓漢式 例子

對於系統中的某些類來說,只有乙個例項很重要,例如,乙個系統中可以存在多個列印任務,但是只能有乙個正在工作的任務;乙個系統只能有乙個視窗管理器或檔案系統;乙個系統只能有乙個計時工具或id(序號)生成器。如在windows中就只能開啟乙個任務管理器。如果不使用機制對視窗物件進行唯一化,將彈出多個視窗,如果這些視窗顯示的內容完全一致,則是重複物件,浪費記憶體資源;如果這些視窗顯示的內容不一致,則意味著在某一瞬間系統有多個狀態,與實際不符,也會給使用者帶來誤解,不知道哪乙個才是真實的狀態。因此有時確保系統中某個物件的唯一性即乙個類只能有乙個例項非常重要。

如何保證乙個類只有乙個例項並且這個例項易於被訪問呢?定義乙個全域性變數可以確保物件隨時都可以被訪問,但不能防止我們例項化多個物件。乙個更好的解決辦法是讓類自身負責儲存它的唯一例項。這個類可以保證沒有其他例項被建立,並且它可以提供乙個訪問該例項的方法。這就是單例模式的模式動機

懶漢式和餓漢式的區別在於建立單例物件的時間不同,懶漢式是在你真正需要用到的時候才去建立物件

public class singleton 

//2.定義乙個方法來為客戶端提供類例項

//3.這個方法要定義成類方法,即加static

public singleton getinstance()

//如果有就直接使用

return instance;}}

我們新建乙個測試類,輸出jvm1和jvm2的位址是一樣的,因為是同乙個物件

public class smain 

}

特點:實現了延遲載入,但在多執行緒情況下可能會出現問題,不能保證執行緒安全。

public class singleton

public static singleton getinstance()}}

return singleton;}}

當整個類被載入的時候,就會自行初始化 singleton 這個靜態唯讀變數。

public class singleton

public static singleton getinstance()

}

很多應用專案都有配置檔案,這些配置檔案裡面定義一些應用需要的引數資料。

private string paramatera;//引數

public string getparamatera()

public void setparamatera(string paramatera)

//私有化構造方法

} if (config == null)

return config; }}

//測試類

public class client

設計模式之 單例設計模式

單例設計模式 單例設計模式概述 單例模式就是要確保類在記憶體中只有乙個物件,該例項必須自動建立,並且對外提供。優點 在系統記憶體中只存在乙個物件,因此可以節約系統資源,對於一些需要頻繁建立和銷毀的物件單例模式無疑可以提高系統的效能。缺點 沒有抽象層,因此擴充套件很難。職責過重,在一定程式上違背了單一...

設計模式之單例設計模式

singleton 保證乙個類只有乙個例項,並提供訪問它的全域性訪問點 類初始化時,立即載入這個物件 沒有延時載入的優勢 載入類時,天然的是執行緒安全的!private static singletondemo1 instance new singletondemo1 private singlet...

設計模式之單例設計模式

目錄 1.到底什麼是設計模式?2.什麼是單例設計模式?3.單列設計模式的兩種實現方式 餓漢式懶漢式 執行緒不安全 4.執行緒安全的寫法 餓漢式懶漢式 執行緒安全 設計模式可以理解為別人成功的故事,通用的套路,前人的經驗,設計模式是一種思想,沒有具體的實現。打乙個比方 世界上只有乙個太陽,乙個月亮,單...