設計模式 單例模式

2021-08-01 02:46:37 字數 1754 閱讀 7085

單例設計模式:解決乙個類在記憶體只存在乙個物件。(保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點)

想要保證物件的唯一:

1.為了避免其他程式過多建立該類對類物件。先禁止其他程式建立該類物件。

2.還為了讓其他程式可以訪問到該類物件,只好在本類中,自定義乙個物件。

3.為了方便其他程式對自定義物件的訪問,可以對外提供一些訪問方式。

這三部怎**中體現?

1.將建構函式私有化。

2.在類中建立乙個本類物件。

3.提供乙個方法可以獲取到該物件。

對於事物該怎麼描述還怎麼描述。

當需要將該事物的物件保證在記憶體中唯一時,就將以上的三步加上即可。

1

/**2

* 單例模式singleton

3* 應用場合:有些物件只需要乙個就足夠了.

4* 作用:保證整個應用程式中某個例項只有乙個.

5* 型別:餓漢模式.6*/

7public

class

singleton

1213

//2.建立類的唯一例項 使用private static修飾符

14private

static singleton instance = new

singleton();

1516

//3.提供乙個用於獲取例項的方法 使用public static修飾符 (物件導向的封裝性要求控制訪問,不允許其他類直接訪問本類的成員變數(私有化))

17public

static

singleton getinstance()

20 }

1/*2

* 物件是方法被呼叫時,才初始化,也叫做物件的延時載入。稱為:懶漢式

3* single類進記憶體,物件還沒有存在,只有呼叫getinstance方法,才建立物件。4*/

5class

single1

7private

static single1 s=null;8

/*9* 此處可以加乙個synchronized(同步),使只有乙個執行緒可以進入該方法,避免錯亂。

10* 但是每次只有乙個執行緒可以進入導致該方法效率低。

11public static synchronized single1 getinstance()

16*/

1718

/*以下方法更為高效 雙重鎖定

*/19

public

static

single1 getinstance()

25}

26return

s;27

}28 }

問:懶漢式為什麼要使用兩次 s==null 的判斷?

答:對於例項物件存在的情況,直接返回,這沒有問題。當例項物件s為null並且同時有兩個執行緒呼叫getinstance()方法時,它們將都可以通過第一重 s==null 的判斷。然後由synchronized機制,這兩個執行緒只有乙個進入,另乙個在外排隊等候,必須要其中乙個進入並出來後,另乙個才能進入。而此時如果沒有第二重的s==null ,則第乙個執行緒建立例項物件後,第二個執行緒還可以繼續建立新的例項物件,這就沒有達到單例的目的。

餓漢模式和懶漢模式的區別:

餓漢模式的特點是載入類時比較慢(因為類一載入就是例項化物件),但執行時獲取物件的速度比較快,執行緒安全

懶漢模式的特點是載入類時比較快,但執行時獲取物件的速度比較慢,(改寫後的執行緒安全)

設計模式 單例模式

單例模式 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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...