劍指offer面試題2(單例設計模式)

2021-07-11 23:09:06 字數 1234 閱讀 9804

單例設計模式屬於建立設計模式,是設計模式中很常用的一種。

確保某個類中只有乙個例項,並且自行例項化並向整個系統提供這個例項。

確保某個類有且僅有乙個例項,避免產生多個物件消耗過多的資源,或者某種型別的物件有且僅有乙個。

構造方法不對外公開,一般用private修飾。

通過乙個靜態方法返回單例類的例項。

確保單例類返回的物件有且僅有乙個,尤其在多執行緒併發訪問的時候。

解法一:只適用於單執行緒環境(懶漢式基礎版)

public

class singleton

public

static singleton getinstance()

return msingleton;

}}

這種單例模式,在需要例項的時候才去建立,在某種程度上節約了資源,稱之為懶漢式單例模式。這種解法僅僅適用於單執行緒環境中,當多個執行緒同時使用此解法時,將會違反單例模式的乙個例項的設計初衷。

解法二:適用於多執行緒環境(懶漢式加強版)

public

class singleton

public

static synchronized singleton getinstance()

return msingleton;

}}

這種解法避免了多執行緒帶來的困擾,第一次例項化的時候需要及時例項化,反應稍慢,最大的問題是在每次獲取例項的時候,都會進行同步,造成不必要的同步開銷。

解法三:雙重判斷鎖解法(懶漢式最終版)

public

class singleton

public

static singleton getinstance()}}

return msingleton;

}}

這樣在需要例項的時候才去建立,在某種程度上節約了資源;同時通過兩層判斷提高效率:第一層判斷是為了避免不必要的同步,第二層判斷是為了在null的情況建立例項。

解法四:餓漢型(簡單暴力型)

public

class singleton

public

static singleton getinstance()

}

顧名思義不管什麼時候需要類的例項,預先在宣告時就例項化好物件,以便需要的時候返回。不管單執行緒還是多執行緒均適用,簡單暴力,我認為最好的單例沒有之一。

劍指offer 面試題2 實現單例模式

終於把簡直offer看完了一遍 所以第二遍我決定要美乙個題自己去實現一遍,會加入自己的理解 但是不一定對哈 package t2singleton 餓漢式 author yxx public class singleton private static singleton singleton new...

劍指offer 面試題2 實現單例模式

版本1 餓漢式,在一開始就建立好例項 建構函式私有,使用靜態區域性變數,缺點只能在c 11以上環境中執行 class singleton static singleton getinstance private singleton 或者 class singleton static singleto...

劍指offer 面試題2

單例模式是面試經常會提及的題目 那麼什麼是單例模式?怎麼實現單例模式?以上問題是本節的核心 首先,單例模式是指乙個類只能定義乙個物件,或者說乙個類只能擁有乙個物件。其次,怎麼實現單例模式,通過將建構函式宣告為private,利用static 引數的特性作為標識進行判斷。如下 include usin...