設計模式之單例模式

2022-02-24 10:23:39 字數 1363 閱讀 6675

單例模式:保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。

通常我們可以定義乙個全域性變數使得乙個物件被訪問,但它不能阻止我們例項化多個物件,所以乙個最好的辦法就是讓類自身儲存它的唯一例項。這個類可以保證沒有其他例項可以被建立,並且提供乙個訪問該例項的方法。

public

class

singleton

public

static

singleton getinstance()

return

instance;}}

public

class

test }}

這裡特別要注意singleton類的構造方法是私有的,這樣可以防止通過new的方式建立該物件,而只能通過getinstance方法獲得。我們還有些細節需注意,在多執行緒程式中,如果多個執行緒同時訪問singleton類,並呼叫getinstance方法,會有可能建立多個物件。這時可以給程序一把鎖來處理。

public

class

singleton1

public

static

singleton1 getinstance()

}return

instance;}}

這段**使得物件由最先進入的那個執行緒建立,以後執行緒在進入時不會再去建立物件例項。由於有了lock,保證了在多執行緒情況下不會建立多個物件。但這個寫法在每次呼叫getinstance方法時都要獲取鎖,影響程式效能,所以這個類還得改良。

public

class

singleton2

public

static

singleton2 getinstance()}}

return

instance;}}

例項在未被建立時再加鎖處理,保證了多執行緒的安全,這種做法被稱為double-checking locking 雙重鎖定。

除了上面幾種懶漢式單例類,還有一種餓漢式單例,這種靜態初始化方式是在自己被載入時就將自己例項化。所以會提前占用系統資源。

餓漢式單例類:

public

class

singleton3

public

singleton3(string name)

public

static

singleton3 getinstance()

}

需要注意的是instance的修飾為static final。

設計模式之單例模式

前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...

設計模式之單例模式

package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...

設計模式之 單例模式

單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式 單件模式 使用方法返回唯一的例項 public class singleton private static singleton instance public static singleton geti...