Java設計模式之單類模式

2021-07-31 20:44:00 字數 1991 閱讀 7618

單例類模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例。在計算機系統中,執行緒池、快取、日誌物件、對話方塊、印表機、顯示卡的驅動程式物件常常被設計成單例。選擇單例模式是為了避免不一致狀態

有如下特點:

1. 單例模式只能有乙個實類。

2. 單例類必須自己建立自己的唯一例項。

3. 單例類必須給其他物件提供這一例項。

package com.cjm.mvnbook.test7;

/** * 懶漢式單類模式

*@author chenjieming

* */

public

class

lazysingletontest

public

void

setname(string name)

public

static lazysingletontest singleton = null;

//構造方法私有化,不能通過構造方法建立例項化物件

private

lazysingletontest()

public

static lazysingletontest getinstance()

return singleton;

}}

package com.cjm.mvnbook.test7;

public

class hungersingletontest

public

void

setname(string name)

public

static hungersingletontest singletontest = null;

private

hungersingletontest()

static

public

static hungersingletontest getinstance()

}

執行測試:

package com.cjm.mvnbook.test7;

public

class test7

public

static

void

lazytest()

public

static

void

unsafehunger()

}

執行結果:李四 李四

餓漢式和懶漢式區別:

從名稱上可以看出來,餓漢就是類一旦載入,就把單例初始化完成,保證getinstance的時候,單例是已經存在的了,而懶漢比較懶,只有當呼叫getinstance的時候,才回去初始化這個單例;

餓漢式是天生執行緒安全的,而懶漢式有執行緒安全方面的問題;

實現懶漢式執行緒安全

1.在獲取例項的方法上加同步

public

static

synchronized lazysingletontest getinstance1()

return singleton;

}

2.相對於第一種方法效能提公升,不用每次同步

public

static lazysingletontest getinstance2()}}

return singleton;

}

3.靜態內部類

private

static

class

lazyholder

public

static

final lazysingletontest getinstance3()

java設計模式之單例模式

單位面試題目中有一道關於單例模式的題目.大多數參加筆試的同事都會寫出getinstance這個函式,但是當我問起什麼情況下需要使用單例 單例具體有什麼好處的時候 static函式也可以構建唯一例項,為什麼還需要單例.從使用單例的經驗來看,如下場景下,個人感覺應該使用單例 1.如果需要構建乙個工具類,...

java設計模式 之 單例模式

單例模式 有些類在程式執行過程中只需要儲存乙個例項,比如檔案管理類,音訊管理類,那麼我們如何實現乙個單例類呢?有以下幾點 1 定義乙個靜態變數 2 建構函式私有化 3 提供乙個public 靜態方法,獲取這個例項 4 一定要做執行緒同步 public static class singleton p...

Java設計模式之單例模式

說到單例模式 大家一定非常熟悉 這是最常見也是設計模式中相對簡單 好理解的設計模式 今天就跟大家掰一掰單例模式 單例模式確保某個類只有乙個例項 應用場景 執行緒池 快取 等物件常常被設計成單例 然而單例分兩種 1 惡漢式 2 懶漢式 我們先來看下 惡漢式 public class singleton...