也談單件模式

2021-09-05 18:14:36 字數 1351 閱讀 2869

前段時間,在看《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 定義 確保乙個類只有乙個例...