前段時間,在看《c#設計模式》(還沒看完)。大致了解了下單件模式。
我就先「摘錄」下書上是怎麼說單件模式的:
單件模式(singleton):要求乙個類僅有乙個例項,與此同時,提供乙個全域性的訪問點。這意味著:乙個特定的物件承擔了某項職責,而其他物件必須依賴這項職責。
一般情況下,對乙個單件物件進行惰性初始化,即僅當第一次使用這個物件的時候才對這個物件進行初始化。在乙個單獨的物件例項中,集中了這個物件例項所屬類的所有權力。
以上是《c#設計模式》對單件模式的描述。
其實,我在看完書之後,一直都不大懂是什麼意思,單件模式可以做什麼用。只是,隱隱地知道,它的例項只能有乙個。
最近,我在做的乙個專案中要有用到mdi子窗體,而且只能例項化(開啟)乙個。
我原來的做法是檢查所有已經存在的mdi子窗體,如果它們中有需要的,那麼把這個窗體bringtofront;如果沒有,即還未被例項化,那麼就初始化該窗體。
後來,無意間在微軟的新聞組中看到有人解答: mdi程式中如何讓子窗體不重複開啟的問題。我就看了下,發現他就是用單件模式來「鎖定」mdi子窗體只能被例項化一次;如果該例項已經存在,就不做處理;如果不存在,就new乙個。
我突然豁然開朗:原來單件模式的應用可以這樣地自然;原來這個就是單件模式。(當然啦,單件模式的應用肯定是要多得多,有用得多;但是,就從我這個菜鳥的角度來看,這個就是我目前要用到的單件模式)。
我就在其基礎上稍作更改,應用到了我的專案中。 呵呵!
以下是他的問答,加**:
這個問題我來回答:不一定是最適合的方法,只是方法的一種。
我是使用單例模式
窗體類是這樣寫的
public
partial
class
form1 : form
#endregion
#region
form1單例模式
//////
form1的單例例項
///
private
volatile
static
form1 instance
=null
;///
///本型別的單例屬性
///
public
static
form1 instance
return
instance;}}
#endregion}
呼叫form1.instance.mdiparent
=mdiform;
form1.instance.show();
發現,其實感覺很高深的東西,實際上都有它很簡單的應用。不要認為設計模式是什麼高深的東西,其實就那麼回事(不知道有沒有說錯,反正這就是我這次的體會)!
也談單件模式
前段時間,在看 c 設計模式 還沒看完 大致了解了下單件模式。我就先 摘錄 下書上是怎麼說單件模式的 單件模式 singleton 要求乙個類僅有乙個例項,與此同時,提供乙個全域性的訪問點。這意味著 乙個特定的物件承擔了某項職責,而其他物件必須依賴這項職責。一般情況下,對乙個單件物件進行惰性初始化,...
也談設計模式Facade
門面模式提供乙個高層次的介面,使得子系統更容易使用。子系統與外部系統的通訊必須經過乙個統一的facade進行處理。內部系統的互動在facade中進行整合,這樣,對於外部系統的使用者就不用關注內部系統的複雜性。而有facade的存在也降低了內外系統的耦合。1.內部系統 1.1 內部子系統1 對茶的操作...
單件模式(單例模式)
readme 0.1 本文部分描述 head first 設計模式 旨在學習 單件模式 單例模式 的相關知識 及其應用 單件模式 1.0 單件模式的應用背景 有一些物件其實我們只需要乙個,比方說 執行緒池,快取,對話方塊,登錄檔等的物件,這都可以通過單件模式來解決 1.1 定義 確保乙個類只有乙個例...