單例模式屬於物件建立型模式,其意圖是保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。對一些類來說,只有乙個例項是很重要的,雖然系統中可以有許多印表機,但卻只應該有乙個印表機假離線,只應該有乙個檔案系統和乙個視窗管理器,乙個數字濾波器只能有乙個a/d轉換器,乙個會計系統只能專用於乙個公司。怎樣才能保證乙個類只有乙個例項並且這個例項易於被訪問,乙個全域性變數使得乙個物件可以被訪問,但它不能防止你例項化多個物件,乙個更好的方法是讓類自身負責儲存他的唯一例項。這個類可以保證沒有其他例項可以被建立,並且它可以提供乙個訪問該例項的方法,這就是singleton模式。
實用性:在下面的情況下可以使用singleton模式。 l
當類只能有乙個例項而且客戶可以從乙個眾所周知的訪問點訪問它時。 l
當這個唯一例項應該是通過子類化可擴充套件的,並且客戶應該無需更改**就能使用乙個擴充套件的例項時。
例如:乙個產生隨機數的例子,整個應用程式中只需要乙個類的例項來產生隨機數,客戶端程式從類中獲取這個例項,呼叫這個例項的方法nextint(),公用的方法訪問需要進行同步,這是單例模式需要解決的同步問題。
參與者:singleton:定義乙個instance操作,允許客戶訪問它的唯一例項,instance是乙個類操作。可能負責建立自己的唯一例項。
協作關係:客戶只能通過singleton的instance操作訪問乙個singleton的例項。
使用singleton模式有許多優點: 1.
對唯一例項的受控訪問, 2.
縮小命名空間, 3.
允許對操作和表示的精化, 4.
允許可變數目的例項。 5.
比類操作更靈活。
**:單例模式中需要解決的重要問題是方法的同步問題,同步的粒度有多大等。在本例子中同在獲得類的例項的時候使用了同步,**如下:
public
classsingleton
public
voidsetseed(intseed)
public
intnextint()
public
static
synchronizedsingleton getinstance()
returninstance ;
}privaterandom
generator;
private
staticsingleton
instance ;
} 客戶端呼叫的**:
packagesingleton;
public
classclient}}
總結:單例模式使得應用程式在執行時保持只能有乙個例項,在一些大的應用程式中,主程式只需要有乙個,因此需要使用單例模式
java中單例模式
定義 乙個類只允許產生乙個例項化物件。我們先想想類的例項化物件是如何產生的?它是通過類的構造方法產生的。現在只讓乙個類產生乙個例項化物件,我們就要考慮從它的構造方法入手,我們可以把建構函式私有化,這樣它就不能在類的外部被呼叫了。但如果我們還想在類的外部呼叫類內函式,就必須通過類的例項化物件來呼叫,但...
Java中的單例模式
一 概述 單例模式的寫法有好幾種,這裡主要有三種 懶漢式單例 餓漢式單例 登記式單例。單例模式有以下特點 1 單例類只能有乙個例項。2 單例類必須自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。在計算機系統中,...
Java中的單例模式
保證只有乙個物件 類載入的時候物件就已經存在,餓漢式是執行緒安全的,在類建立的同時就已經建立好乙個靜態的物件供系統使用,以後不再改變,上述例子就是乙個惡漢式 類載入的時候物件還不存在,就是所謂的延遲載入方式,需要時再進行建立,懶漢式如果在建立例項物件時不加上synchronized則會導致對物件的訪...