確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。
確保某個類有且只有乙個物件的場景,避免產生多個物件消耗過多的資源,或者某種型別的物件只應該有且只有乙個。例如,建立乙個物件需要消耗的資源過多,如要訪問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...