設計模式 單例模式 java

2021-08-01 03:56:06 字數 2249 閱讀 1931

應用場景:

1、產生某物件會消耗過多的資源,為避免頻繁地建立與銷毀物件對資源的浪費。如: 對資料庫的操作、訪問

io、執行緒池(threadpool)、網路請求等。

2、某種型別的物件應該有且只有乙個。如果製造出多個這樣的例項,可能導致:程式行為異常、資源使用過量、結果不一致等問題。如果多人能同時操作乙個檔案,又不進行版本管理,必然會有的修改被覆蓋,所以:

乙個系統只能有:乙個視窗管理器或檔案系統,計時工具或id(序號)生成器,快取(cache),處理偏好設定和登錄檔(registry)的物件,日誌物件。

3、 控制資源的使用,通過執行緒同步來控制資源的併發訪問

控制例項的產生,以達到節約資源的目的

控制資料的共享,在不建立直接關聯的條件下,讓多個不相關的程序或執行緒之間實現通訊

實現方式

懶漢-執行緒不安全

public

class singleton

public

static singleton getinstance()

return singleton;

}}

懶漢-執行緒安全

public

class singleton

public

static synchronized singleton getinstance()

return singleton;

}}

同步**塊

public

class singleton

public

static singleton getinstance()

}return singleton;

}}

執行緒安全-雙重檢查鎖定

public

class singleton

public

static singleton getinstance()

}return singleton;

}}

靜態內部類

public

class singleton

public

static final singleton getinstance()

private

static

class singletonholder

}

餓漢式

public

class singleton

public

static final singleton instance = new singleton();

}

public

class singleton

public

static final singleton instance = new singleton();

public

static singleton getinstance()

}

public

class singleton

private

singleton()

public

static singleton getinstance()

}

列舉

public

enum singleton

}

登記式單例

public

class singletonmanager

private

static

void

registerserver(string key, object instance)

}public

static object getservice(string key)

}

造成單例模式失效的幾種場景及解決方案:

1、序列化

2、反射

public

class singleton

}}

3、轉殖

Java設計模式 單例模式

單例模式 singleton 顧名思義,就是乙個類只有乙個例項。作為物件的建立模式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。顯然單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。從具體...

java設計模式 單例模式

這個模式是很有意思,而且比較簡單,但是我還是要說因為它使用的是如此的廣泛,如此的有人緣,單例就是單 一 獨苗的意思,那什麼是獨乙份呢?你的思維是獨乙份,除此之外還有什麼不能山寨的呢?我們舉個比較難複製的物件 皇帝中國的歷史上很少出現兩個皇帝並存的時期,是有,但不多,那我們就認為皇帝是個單例模式,在這...

java設計模式 單例模式

單例模式介紹 單例模式分 懶漢式單例 餓漢式單例。單例模式有一下特點 1 單例類只能有乙個例項。2 單例類必須自己自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。單例有併發問題,只有乙個例項,多個執行緒就可能同...