單例模式的定義:只能有乙個例項,提供唯一公開、可訪問例項的全域性訪問點
單例模式的三種實現方式:
示例1
privatesingleton()
被構造,執行緒id=
", this
.gettype().name, thread.currentthread.managedthreadid);
}private
static singleton m_singleton = null
;public
static
singleton createinstance()
return
m_singleton;
}
優點:直到物件要求產生乙個例項才執行例項化
缺點:執行緒不安全,併發執行時,如果尚未建立例項,會建立多個例項
示例2
privatesingleton()
被構造,執行緒id=
", this
.gettype().name, thread.currentthread.managedthreadid);
}private
static
readonly singleton m_singleton = new
singleton();
public
static
singleton createinstance()
優點:執行緒安全
缺點:靜態初始化由clr執行,缺少例項化機制的控制權 。在程式啟動或第一次訪問引用了類的任何成員時例項已經被建立。
示例3
privatesingleton()
被構造,執行緒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 設計模式 學習設計模式必須先弄清楚它是解決什麼問題的。單例是解決什麼問題的呢?可以保證乙個類的物件唯一性。場景 比如多個程式都要使用乙個配置檔案中的資料,而且要實現資料共享和交換。必須要將多個資料封裝到乙個物件中。而且多個程...
物件導向程式設計思想 狀態模式
一 引言 上篇部落格中學習了中介者模式,我們留下了乙個問題,當出現多個玩家需要輸贏狀態條件判斷時,可不可以不去修改中介者類,因為如果每新增乙個條件判斷,就要修改中介者類,破壞了封裝,違背開閉原則。今天我們學習的內容就是要解決這種業務場景,狀態模式 二 狀態模式 定義 當乙個物件的內在狀態改變時允許改...
物件導向程式設計思想 命令模式
一 引言 起初餐館吃飯都是客人和廚師直接溝通,菜譜是一樣的,可是客人多了的時候,有的客人可能有急事不吃了要退單,還有的客人點很多菜需要記錄類別和次序等現象,這時服務員角色的出現解決了問題。那麼面對某些無法抵禦變化的 緊耦合 的場景如何做程式設計呢?命令模式設計便出現了,使得 行為請求者 與 行為實現...