設計模式 單例模式的幾種建立方式

2021-10-01 12:30:57 字數 1907 閱讀 2712

ensure a class has only one instance, and provide a global point of access to it.

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

建立方式分為餓漢式、懶漢式、雙重檢查、靜態內部類、列舉等。
靜態屬性建立

/**

* 採用餓漢式建立單例

* 使用靜態屬性,如果建立後不使用,會有記憶體浪費

*/class

singleton

public

static singleton getinstance()

}

靜態**塊建立

/**

* 使用餓漢式建立單例物件

* 採用靜態**塊實現

*/class

singleton

private

singleton()

public

static singleton getinstance()

}

**示例

/**

* 使用懶漢式建立單例物件,會出現執行緒併發問題,不推薦使用

*/class

singleton

public

static singleton getinstance()

return instance;

}}

在1的基礎上優化如下

/**

* 使用懶漢式建立單例物件

* 解決了執行緒併發問題,但效率低

*/class

singleton

public

static

synchronized singleton getinstance()

return instance;

}}

在2的基礎上提公升效率

/**

* 懶漢式建立單例,執行緒安全,推薦使用

* volatile作用:

* 1) 多執行緒間的資料可見性

* 2) 防止指令重排

* 如果不加volatile,可能會得到乙個半初始化的物件(當然這種情況比較少見)

*/class

singleton

catch

(exception e)

}public

static singleton getinstance()

}}return instance;

}}

**示例

/**

* 靜態內部類實現單例,執行緒安全,推薦使用

*/class

singleton

private

static

class

singletoninstance

public

static singleton getinstance()

}

public

class

singletontest

service.

shutdown()

;}}

**示例

/**

* 列舉實現單例,執行緒安全,推薦使用

*/enum singleton

// 測試類

public

class

singletontest

service.

shutdown()

;}}

設計模式 單例模式的幾種實現方式

1.概述 單例模式 簡單的說就是可以確保只產生乙個類例項,讓多個使用者或者多個執行緒同時使用這乙個例項,而不需要每次使用都建立一次物件。2.優缺點和適用場景 3.幾種不同形式的單例模式 class singleclass public static singleclass getinstance 這...

設計模式 單例模式(一)單例的幾種基本實現方式

單例模式餓漢式單例 public class hungrysingleton public static hungrysingleton getinstance 也可以將例項初始化的過程放在靜態 塊中。這兩種寫法都非常的簡單,也非常好理解,餓漢式適用在單例物件較少的情況。懶漢式單例 懶漢式單例的特點...

單例模式的幾種方式

學習設計模式有一段時間了,今天恰好用到了單例,而且單例模式比較常用,面試常考,比較重要。為了方便我不再一步一步詳細的解釋,下面只是給出幾種常用的用法 public class singleton public static singleton getinstance public class sin...