1.什麼是單例模式
單例模式是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例類的特殊類。 通過單例模式可以保證系統中一個類只有一個實例而且該實例易於外界訪問,從而方便對實例個數的控制並節約系統資源。如果希望在系統中某個類的對象只能存在一個,單例模式是最好的解決方案。
NET中單例模式定義:“一個類有且僅有一個實例,並且自行實例化向整個系統提供。”
實例
三是該類提供了一個靜態的共有的函數用於創建或獲取它本身的靜態私有對象。
如果一個方法和他所在類的實例對象無關,那麼它就應該是靜態的,反之他就應該是非靜態的。如果我們確實應該使用非靜態的方法,但是在創建類時又確實只需要維護一份實例時,就需要用單例模式了。
比如說我們在系統運行時候,就需要加載一些配置和屬性,這些配置和屬性是一定存在了,又是公共的,同時需要在整個生命周期中都存在,所以只需要一份就行,這個時候如果需要我再需要的時候new一個,再給他分配值,顯然是浪費內存並且再賦值沒什麼意義,所以這個時候我們就需要單例模式或靜態方法去維持一份且僅這一份拷貝,但此時這些配置和屬性又是通過面向對象的編碼方式得到的,我們就應該使用單例模式,或者不是面向對象的,但他本身的屬性應該是面對對象的,我們使用靜態方法雖然能同樣解決問題,但是最好的解決方案也應該是使用單例模式。
從功能上講:單例模式可以控制單例數量;可以進行有意義的派生;對實例的創建有更自由的控制;
在一個類MainFunctionZone中:
#region###用於實現單例模式 Instance { { (paklock) { (_instance == ) _instance = (); _instance; } } } _instance; paklock = (); MainFunctionZone() { InitializeComponent(); }
例如:以上內容創建在一個類MainFunctionForm中,而IMainFunctionFrom是該類繼承的一個接口,接口會定義一些方法,那麼這個類將實現接口中的所有方法,當然,這個類可能還有其他方法,這裡用IMainFunctionForm當做這個單例模式Instance的類型,就是在其他類中只能單例調用IMainFunctionForm這裡面定義的方法
比如:
{ System.Windows.Forms. ActivingControl { ; }//在其他類中調用時,只有寫入屬性(set)。 BackToLogin(); SwitchToNewInstance<TControl>() TControl : , (); }
接口中定義了這三個方法,那麼在其他類中可以這樣用:(記住一定不能用new的方法,單例模式)
.Instance.BackToLogin();