物件導向程式設計思想 單例模式

2022-01-11 22:11:11 字數 1712 閱讀 6776

單例模式的定義:只能有乙個例項,提供唯一公開、可訪問例項的全域性訪問點

單例模式的三種實現方式:

示例1

private

singleton()

被構造,執行緒id=

", this

.gettype().name, thread.currentthread.managedthreadid);

}private

static singleton m_singleton = null

;public

static

singleton createinstance()

return

m_singleton;

}

優點:直到物件要求產生乙個例項才執行例項化

缺點:執行緒不安全,併發執行時,如果尚未建立例項,會建立多個例項

示例2

private

singleton()

被構造,執行緒id=

", this

.gettype().name, thread.currentthread.managedthreadid);

}private

static

readonly singleton m_singleton = new

singleton();

public

static

singleton createinstance()

優點:執行緒安全

缺點:靜態初始化由clr執行,缺少例項化機制的控制權 。在程式啟動或第一次訪問引用了類的任何成員時例項已經被建立。

示例3

private

singleton()

被構造,執行緒id=

", this

.gettype().name, thread.currentthread.managedthreadid);

}private

static singleton m_singleton = null

;

private

static

readonly

object m_object = new

object

();

public

static

singleton createinstance()}}

return

m_singleton;

}

優點:解決執行緒併發問題,將例項化延遲到第一次訪問物件時發生

使用場景:系統的任務管理器,配置檔案的讀取,資料庫連線池的設計,多執行緒的執行緒池設計,應用程式的日誌應用等。

說到這裡有人會問:

1.有了靜態類,為什麼還要有「單例」?

靜態類是一種語法,而單例模式是一種思想。

靜態類不可以繼承類或實現介面。

靜態類中不能宣告例項成員。即靜態類中所有的字段,屬性,方法等都必須是靜態的。

無法控制靜態成員的初始化。 

設計模式是前人不斷嘗試、改進後提煉出來的思想。但我們不要生搬硬套,適合的才是最好的。在此,關於單例模式的學習到此結束。謝謝您的閱讀

由於博主能力有限,文中可能存在不正確的地方,歡迎斧正,補充。        

物件導向 單例模式

設計模式 解決某一類問題行之有效的解決辦法 思想 單例 singleton 設計模式 學習設計模式必須先弄清楚它是解決什麼問題的。單例是解決什麼問題的呢?可以保證乙個類的物件唯一性。場景 比如多個程式都要使用乙個配置檔案中的資料,而且要實現資料共享和交換。必須要將多個資料封裝到乙個物件中。而且多個程...

物件導向程式設計思想 狀態模式

一 引言 上篇部落格中學習了中介者模式,我們留下了乙個問題,當出現多個玩家需要輸贏狀態條件判斷時,可不可以不去修改中介者類,因為如果每新增乙個條件判斷,就要修改中介者類,破壞了封裝,違背開閉原則。今天我們學習的內容就是要解決這種業務場景,狀態模式 二 狀態模式 定義 當乙個物件的內在狀態改變時允許改...

物件導向程式設計思想 命令模式

一 引言 起初餐館吃飯都是客人和廚師直接溝通,菜譜是一樣的,可是客人多了的時候,有的客人可能有急事不吃了要退單,還有的客人點很多菜需要記錄類別和次序等現象,這時服務員角色的出現解決了問題。那麼面對某些無法抵禦變化的 緊耦合 的場景如何做程式設計呢?命令模式設計便出現了,使得 行為請求者 與 行為實現...