設計模式之 單例模式

2021-08-14 09:26:12 字數 3137 閱讀 3554

特點:

- 1、 保證從系統啟動到系統終止, 全過程只會產生乙個例項。

- 2、 當我們在應用中遇到功能性衝突的時候, 需要使用單例模式。

窮舉法:

- 配置檔案: 如果不是單例(針對於某一種功能的配置)

- spring context factory 上下文

單例模式的七種寫法:

- 懶漢式,需要用的時候才初始化

- 餓漢式,先例項化

- 註冊登記式,相當於有個容器裝在所有的例項,在例項產生之前先檢查下容器看有沒有,如果有就直接取出來,如果沒有就先new乙個放進去,然後給後面的人用,spring ioc容器就是一種典型的註冊登記單例。

七種單例模式:

/**

* 懶漢式單例模式

*@author doublechina

*@date 2018/1/6 11:51

*/public

class

singleton

//2、然後先宣告乙個靜態變數儲存單例的引用

private

static singleton singleton=null;

//3、通過提供乙個靜態方法來獲得單例的引用

public

static singleton getinstance()

return singleton;

}}

/**

* 懶漢式單例模式,保證執行緒安全

*@author doublechina

*@date 2018/1/6 11:51

*/public

class

singleton1

//2、然後先宣告乙個靜態變數儲存單例的引用

private

static singleton1 singleton=null;

//3、通過提供乙個靜態方法來獲得單例的引用

//為了保證多行程環境下正確訪問,給方法加上同步鎖synchronized

//存在一定的效能問題

public

static

synchronized singleton1 getinstance()

return singleton;

}}

/**

* 懶漢式單例模式,雙重鎖檢查

*@author doublechina

*@date 2018/1/6 11:51

*/public

class

singleton2

//2、然後先宣告乙個靜態變數儲存單例的引用

private

static singleton2 singleton = null;

//3、通過提供乙個靜態方法來獲得單例的引用

//為了保證多行程環境下正確訪問,給方法加上同步鎖synchronized

//存在一定的效能問題

public

static singleton2 getinstance() }}

return singleton;

}}

/**

* 最牛b的方式實現單例模式

*@author doublechina

*@date 2018/1/6 11:51

*/public

class

singleton4

//1.先把構造方法私有化

private

singleton4()

//3.提供獲取例項方法

//防止子類重寫父類方法

public

static

final singleton4 getinstance()

//內部類的初始化,需要依賴主類

//也就是說,當我們的jvm載入singleton4類的時候,我們的innerclass也同時被載入過來了

//目前還沒有被例項化,需要等主類先例項化之後,內部類才開始例項化

//加final是為了防止子類重寫父類方法

//}

/**

* 餓漢式

* 單例模式,在類初始化,已經有自行的例項化

*@author doublechina

*@date 2018/1/6 11:51

*/public

class

singleton3

//2、宣告變數,在類例項化之前就初始化變數,將物件引用儲存

private

static

final singleton3 singleton = new singleton3();

//3、開放靜態方法,獲取例項,但是占用記憶體空間

public

static singleton3 getinstance()

}

/**

* 列舉式單例模式

* 不常用

*@author doublechina

*@date 2018/1/6 11:52

*/public

enum singleton5

}

/**

* 登記式單例模式

* 類似spring裡面的方法,講類名註冊,下次從裡面直接獲取

*@author doublechina

*@date 2018/1/6 11:52

*/public

class

singleton6

//保護預設的建構函式

protected

singleton6(){}

public

static singleton6 getinstance(string name)

if (map.get(name)==null) catch (instantiationexception e) catch (illegalacces***ception e) catch (classnotfoundexception e)

}return map.get(name);

}}

設計模式之單例模式

前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會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...