詳解單例模式

2021-07-24 23:54:42 字數 1390 閱讀 2590

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

確保某個類有且只有乙個物件的場景,避免產生多個物件消耗過多的資源,或者某種型別的物件只應該有且只有乙個。例如,建立乙個物件需要消耗的資源過多,如要訪問io和資料庫等資源,這時就要考慮使用單例模式。

餓漢單例模式

public

class singleton

public

static singleton getinstance()

}

懶漢單例模式

public

class singleton

public

static synchronized singleton getinstance()

return singleton;

}}

double checklock(dcl)實現單例

public

class singleton

public

static singleton getinstance()}}

return sinstance;

}}

靜態內部類單例模式

public

class singleton

public

static singleton getinstance()

private

static

class singletonholder

}

使用容器實現單例模式

public

class singleton

public

static

void

registerservice(string key,object instance)

}public

static object getservice(string key)

}

懶漢為getinstance()方法中新增了synchronized關鍵字,這是懶漢在多執行緒情況下保證單例物件唯一性的手段。但即使instance()已經被初始化,每次呼叫此方法時都會進行同步,這樣會消耗不必要的資源,這是懶漢單例模式的最大問題。優點在只有使用時才會被例項化,在一定程度上節約資源。懶漢一般不建議使用。

dcl方式實現單例詳解

dcl模式的優點是既能夠在需要時才初始化單例,又能夠保證執行緒安全,且單例物件初始化後呼叫getinstance不進行同步鎖。

可以看到getinstance方法中對instance進行了兩次判空:第一層判斷主要是為了避免不必要的同步,第二層的判斷則是為了在null的情況下建立例項。

單例模式詳解

單例模式的意思就是只有乙個例項。單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。1.單例模式的要點 顯然單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。2.單例模式的優點 1.例項控制 si...

單例模式詳解

單例模式是設計模式中比較常用的,今天我要詳細的了解一下,並且進行一些比較 public class singleton public static singleton getinstance catch interruptedexception e 單例模式的精髓就在這,類的內部可以new inst...

單例模式 詳解

保證乙個類僅有乙個例項,並且提供乙個訪問它的全域性訪問點 在該例項不存在的情況下,可以通過乙個方法建立乙個類來實現建立類的新例項 如果例項已經存在,它會簡單返回該物件的引用 建立型模式 var singleton function return var singlea singleton.getin...