單例模式 Singleton

2021-08-18 15:08:39 字數 1066 閱讀 8088

以下內容主要**於《matlab物件導向程式設計》,我只是提供這裡用到的**,原書上的**是matlab寫的大家可以去參考,我這裡的這些**是隨手寫的沒有在編譯器裡驗證,反正大家意會一下就好:

單例模式的目標】單例模式主要用來控制某個類例項出來的物件的數量,通常情況之下單例模式意味著單例類只能例項乙個物件。

首先看這樣乙個簡單的類:

public class myclass()

}

這個類定義了乙個私有字段,然後宣告了乙個方法列印輸出這個字段,但是這個類卻無法控制這個類例項物件的數量,因為外部程式可以利用這個類來例項任意多數量的物件。

myclass class1 = new myclass();

myclass class2 = new myclass();

myclass class3 = new myclass();

... ...

現在假如我需要嚴格控制這個物件所能例項物件的數量(比如說一些多個例項會引入邏輯錯誤的情況下:如某個資料庫只允許某個特定的物件讀寫),那麼我需要怎麼做呢?

1】我需要對例項過物件的數量做乙個記錄,用來判斷這個類的物件有沒有被例項過

2】如果物件已經存在,則返回上乙個已經例項過的物件

根據以上,我們通過在類當中新增乙個中間層來實現對可例項化物件的數量進行控制:

public class myclass()

public static myclass getinstence()

return myclassflag ;

}}

在這段**中將構造方法myclass設定成了私有化方法,從類的外部無法訪問,杜絕了外部呼叫構造方法例項物件的可能;同時建立了乙個公用的中間方法getinstance,用來例項物件,這個中間層是static(靜態)的,因此可以直接通過類.方法呼叫,而不需要先例項物件。而且這個中間層方法只能例項乙個物件。這種方法就是單例模式的經典實現方法。

同時應注意,因為子類在例項物件時候必須要訪問父類的建構函式,而這個單例類的建構函式又是私有的(不能從外部訪問),因此這個單例類是不能被繼承的。

Singleton 單例 模式

singleton 模式的宗旨在於確保某個類只有乙個例項,別且為之提供乙個全域性訪問點。為了防止其他工作人員例項化我們的類,可以為該類建立唯一乙個構造器,並將構造器的可見 設定為私有。值得注意的是,如果我們建立了其他的非私有的構造器,或者根本沒有為該類提 供構造器,那麼其他人員還是能例項化我們的類。...

Singleton 單例 模式

今天看了,單例模式。感覺他的本質就是,控制類例項的個數。特例就是,控制static變數的唯一性,保證各個程式共享著同一例項。乙個例子 package singleton description 這是乙個單例模式的使用demo author kyle goal 實現乙個類僅有乙個例項 singleto...

單例(Singleton)模式

單例模式的特點 singleton模式包含的角色只有乙個,那就是singleton。singleton擁有乙個私有建構函式,確保使用者無法通過new取得singleton的例項。除此之外,該模式中包含乙個靜態私有成員變數instance與靜態公有方法instance。instance方法負責檢驗並例...