應用程式委託和新的單例(譯)

2021-09-21 19:27:31 字數 665 閱讀 6854

這是乙個全域性變數:

wizard *gwizard;

我將會把這稱作零階全域性,前提是我不需要和任何物件(包括類)互動來訪問這個物件。

下面,我們來看看乙個單例

[wizard sharedwizard]; //希望他不忙

我把這稱作一階全域性,因為我們需要通過請求類(1步)來訪問它。

現在,這是乙個二階全域性

然後這是乙個三階全域性

這些都沒有任何減少其全域性性。如果我不用直接知道而可以在程式的任何地方獲取它,它就是全域性的。

因此,適用所有的全域性問題

· 如果兩個執行緒想要使用相同的wizard?

· 如果wizard有乙個他自己的委託,而我有兩個物件都希望成為他的委託

· 如果wizard儲存的內部狀態在多個物件嘗試使用它時會被破壞?(嚮導本身之外沒有什麼需要擔心這個問題)。

你的程式的物件圖。他不應該是像這樣複雜:

無論何時你有像這樣的在圍繞其他物件之間跳躍的路徑,就有問題了。紅色的箭頭在有問題的圖中展示你違背迪公尺特法則地方。

物件圖應該是這樣簡單明瞭的:

請注意每乙個controller 它自己應該完整的擁有,或者如果你喜歡,租用(hire)乙個嚮導。這樣消除了物件之間的爭奪和執行緒之間爭奪的可能性(假設其所在的物件都是工作在單執行緒而不是多執行緒)。

應用程式單例

應用程式單例可以通過下面的幾種方法來實現 1.使用mutex類 2.使用semphore類 3.使用eventwaithandle類 其中使用semphore能控制應用程式能夠啟動的例項的個數,下面分別給出相應的實現 例子使用的都是winform應用程式.form1是乙個新建的空的窗體.1.使用mu...

ios應用程式和應用程式委託

其實說白了,就是乙個類將自己不願意實現的方法以協議的方式定義,同時在這個類中包含有乙個型別為id 泛型類 的例項變數,如果另乙個類實現了這個協議,那麼另外的這個類就可以作為第乙個類的委託物件,前乙個類將自己不願意實現的類委託給後乙個類。因為第乙個類擁有第二個類的引用,所有第乙個類的例項可以直接呼叫第...

wpf 單列表 WPF 應用程式單例模式

wpf程式如何只允許開啟乙個視窗,當視窗存在時,啟用視窗。步驟 2 新增引用 system.runtime.remoting 如下 stathread public static void main if singleinstance.initializeasfirstinstance unique...