設計模式 單例模式

2021-10-24 16:54:39 字數 2557 閱讀 1642

在乙個應用中保證某個類只存在單一例項(示例:springmvc中的bean可以設定為singleton)

下面介紹幾種單例模式的實現:

public

class

singletonclass1

public

static singletonclass1 getsingleton()

public

static

void

main

(string[

] args)

}

把物件作為靜態變數,在宣告時就進行例項化。

私有化構造方法

外界通過靜態方法獲取物件例項

裝載時完成例項化,執行緒安全。

沒有懶載入,如果從來沒有使用過這個例項,會造成記憶體浪費。

public

class

singletonclass2

public

static singletonclass2 getsingleton()

public

static

void

main

(string[

] args)

}

把物件作為靜態變數。

私有化構造方法

將靜態變數的例項化放在靜態**塊中

外界通過靜態方法獲取物件例項

裝載時完成例項化,執行緒安全。

沒有懶載入,如果從來沒有使用過這個例項,會造成記憶體浪費。

public

class

singletonclass3

public

static singletonclass3 getsingleton()

return singletonclass;

}public

static

void

main

(string[

] args)

}

把物件作為靜態變數。

私有化構造方法

將靜態變數的例項化放在靜態方法中

外界通過靜態方法獲取物件例項

使用者獲取時會進行靜態變數是否為空判斷,空則例項化,非空返回引用

起到懶載入效果、不會浪費記憶體。

執行緒不安全,執行緒發生上下文切換時,可能會造成獲取到的類不同。

public

class

singletonclass4

public

static singletonclass4 getsingleton()

}return singletonclass;

}public

static

void

main

(string[

] args)

}

與上乙個相同,多乙個synchronized關鍵字

起到懶載入效果、不會浪費記憶體、執行緒安全。

多執行緒訪問時效率低。

public

class

singletonclass5

public

static singletonclass5 getsingleton()

}}return singletonclass;

}public

static

void

main

(string[

] args)

}

優點:起到懶載入效果、不會浪費記憶體、執行緒安全。

public

class

singletonclass7

static

class

innerclass

public

static singletonclass7 getsingleton()

public

static

void

main

(string[

] args)

}

將單例物件以靜態變數的形式放入靜態內部類中,宣告時即可例項化

外界通過外部類的靜態方法獲取內部靜態類中的單例物件

(外部類的載入不會引起內部類的載入)

起到懶載入效果、不會浪費記憶體、執行緒安全。

public

class

singletonclass6

static

enum singletonenum

public singletonclass6 getinstance()

}public

static singletonclass6 getinstance()

public

static

void

main

(string[

] args)

}

將單例物件放入列舉類最作為成員

優點:執行緒安全,還能防止反序列化時重新建立新的物件

設計模式 單例模式

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