設計模式 單例模式

2021-07-26 13:51:41 字數 1838 閱讀 3752

單例模式能夠確保乙個類只有乙個例項。自行提供這個例項並向整個系統提供這個例項。本例項介紹如何使用這種設計模式及單例模式的呀用法

實現單例模式的技術要點如下:

1.單例模式有兩種實現方式:第一種是將類的構造方法私有化,用乙個私有的類變數instance儲存類的例項,在載入類時,建立類的例項,並將例項賦給instance;然後再

提供乙個公有的靜態方法getinstance,用於獲取類的唯一例項,該方法直接返回instance。第二種是將類的構造方法私有化,用乙個私有的類變數instance儲存類的實

例,在載入類時,將null賦予instance;再提供乙個公有的靜態方法getinstance,用來獲取類的唯一例項,該方法首先判斷instance是否為null,如果為null,則建立例項物件,否則,直接返回instance

2.兩種方式的區別在於:前者被載入時,類的唯一例項被建立;後者在第乙個呼叫getinstance方法時,類的唯一例項被建立,但需要在getinstance()方法的宣告中使用synchronized關鍵字,保證某一時刻只有乙個執行緒呼叫此方法。將類的構造方法私有化的原因是,在外界建立乙個新物件時,無法使用new 物件名();的方式來進行,因為該物件的無參建構函式是私有的,對外不可見。

package pattern;

class onesingleton //將建構函式私有化,防止外界構造onesingleton例項

public static onesingleton getinstance()

public synchronized int getnumber()

public synchronized void nextnumber()

}class twosingleton //將建構函式私有化,防止外界構造twosingleton例項

public static twosingleton getinstance()

return instance;

} public synchronized int getnumber()

public synchronized void nextnumber()

}public class textsingleton

}

源程式解讀

1.onesingleton 和 twosingleton類都實現了單例模式,區別是

第一種方法在類被載入的時候就建立類的唯一物件

private static onesingleton instance=new onesingleton();
第二種方法是第一次呼叫 getinstance()方法時才建立類的唯一例項

private static twosingleton instance=null;//twosingleton的唯一例項

public static twosingleton getinstance()

return instance;

}

2.在twosingleton類中,getinstance()方法宣告中使用了 synchronized(同步)關鍵字,以保證同一時刻只有乙個執行緒進入該方法,這樣,就保證了只會新建乙個物件

3. 單例模式的實現方式將建構函式私有,以防止外界通過呼叫建構函式建立類的物件。

將類的唯一物件儲存為靜態私有屬性 private onesingleton(){} 和private twosingleton(){},

這個使用new onesingleton() 和new twosingleton()的方式是不可行的 ,然後提供乙個靜態公有方法getinstance()獲取該唯一物件,

可以保證每次返回的都是同乙個物件。

設計模式 單例模式

單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...

設計模式 單例模式

class testsingleton static public function instance return self testsingleton private function clone public function setsinvar sinvar public function ...

設計模式 單例模式

單例模式的目的是保證類在系統中只被例項化一次,由該唯一的例項來為系統提供服務.單例模式主要用於保證服務的統一,比如獲取統一的編號服務,模仿oracle的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...