設計模式Singleton

2021-05-22 16:25:02 字數 2205 閱讀 4448

設計模式singleton

引言:相信大多數拜讀過"gang of four"(erich gamma, richard helm, ralph johnson, john vlissides)的經典之作《design pattern》的同僚們,對這本書一定推崇有加。曾有人這麼宣告:"只有在讀過《design pattern》後,我的程式設計水平才真正得到了質的飛躍。" 那麼,如何才能步入設計模式的殿堂?設計模式是資深程式設計師日積月累總結出來的一套可復用的、針對物件導向軟體設計的解決方案,從這個意義上說,世界上存在無數多的設計模式,"gang of four"總結的23種設計模式只是其中的23個精華。入手的關鍵就在於領會"設計模式"的思想,然後再將它們融會貫通、靈活應用到自己到開發過程中。

singleton模式 singleton可以說是《design pattern》中最簡單也最實用的乙個設計模式。那麼,什麼是singleton?顧名思義,singleton就是確保乙個類只有唯一的乙個例項。singleton主要用於物件的建立,這意味著,如果某個類採用了singleton模式,則在這個類被建立後,它將有且僅有乙個例項可供訪問。很多時候我們都會需要singleton模式,最常見的比如我們希望整個應用程式中只有乙個連線資料庫的connection例項;又比如要求乙個應用程式中只存在某個使用者資料結構的唯一例項。我們都可以通過應用singleton模式達到目的。一眼看去,singleton似乎有些像全域性物件。但是實際上,並不能用全域性物件代替singleton模式,這是因為:其一,大量使用全域性物件會使得程式質量降低,而且有些程式語言例如c#,根本就不支援全域性變數。其二,全域性物件的方法並不能阻止人們將乙個類例項化多次:除了類的全域性例項外,開發人員仍然可以通過類的建構函式建立類的多個區域性例項。而singleton模式則通過從根本上控制類的建立,將"保證只有乙個例項"這個任務交給了類本身,開發人員不可能再有其它途徑得到類的多個例項。這一點是全域性物件方法與singleton模式的根本區別。 

singleton模式的實現 singleton模式的實現基於兩個要點: 1)不直接用類的建構函式,而另外提供乙個public的靜態方法來構造類的例項。通常這個方法取名為instance。public保證了它的全域性可見性,靜態方法保證了不會建立出多餘的例項。 2)將類的建構函式設為private,即將建構函式"隱藏"起來,任何企圖使用建構函式建立例項的方法都將報錯。這樣就阻止了開發人員繞過上面的instance方法直接建立類的例項。通過以上兩點就可以完全控制類的建立:無論有多少地方需要用到這個類,它們訪問的都是類的唯一生成的那個例項。以下c#**展現了兩種實現singleton模式的方式,開發人員可以根據喜好任選其一。

實現方式一:

singleton.cs using system;

class singletondemo

private static singletondemo thesingleton = null;

private singletondemo() {}

public static singletondemo instance()

if (null == thesingleton)

return thesingleton;

static void main(string args)

singletondemo s1 = singletondemo.instance();

singletondemo s2 = singletondemo.instance();

if (s1.equals(s2))

與之等價的另外一種實現方式是:

singleton.cs:

using system;

class singletondemo

private static singletondemo thesingleton = new singletondemo();

private singletondemo() {}

public static singletondemo instance()

return thesingleton;

static void main(string args)

singletondemo s1 = singletondemo.instance();

singletondemo s2 = singletondemo.instance();

if (s1.equals(s2)) }

編譯執行: csc singleton.cs 得到執行結果: see, only one instance!

設計模式 Singleton

關於singleton模式的理解與思考 1 singleton模式最常用的解決方案是什麼?2 singleton如何保證執行緒安全性?3 singleton物件的析構如何完成?singleton模式用來保證乙個程序中只有乙個某型別的實體,也就是說程序中的多執行緒可能共享該實體。共享該實體是指共享該實...

Singleton設計模式

1 singleton模式。singleton 譯為單件或單態 模式是設計模式中比較簡單而常用的模式。有些時候在整個應用程式中,會要求某個類有且只有乙個例項,這個時候可以採用singleton模式進行設計。用singleton模式設計的類不僅能保證在應用中只有乙個例項,而且提供了一種非全域性變數的方...

singleton設計模式

有很多情況需要只生成乙個物件,例如大家常用的任務管理器 這就需要單例設計模式了 不多說直接上 1.餓漢式 public class singleton 2.在內部生成物件,也要私有化 private static singleton instance new singleton 3.公共方法呼叫返回...