設計模式(二)單例模式

2021-10-24 17:30:12 字數 2597 閱讀 2286

單例模式(singleton),也叫單子模式,是一種常用的設計模式。在應用這個模式時,單例物件的類必須保證只有乙個例項存在。許多時候,整個系統只需要擁有乙個的全域性物件,這樣有利於我們協調系統整體的行為。比如在某個伺服器程式中,該伺服器的配置資訊存放在乙個檔案中,這些配置資料由乙個單例物件統一讀取,然後服務程序中的其他物件再通過這個單例物件獲取這些配置資訊,顯然,這種方式簡化了在複雜環境下的配置管理。

特別地,在計算機系統中,執行緒池、快取、日誌物件、對話方塊、印表機、顯示卡的驅動程式物件常被設計成單例。事實上,這些應用都或多或少具有資源管理器的功能。例如,每台計算機可以有若干個印表機,但只能有乙個 printer spooler(單例) ,以避免兩個列印作業同時輸出到印表機中。再比如,每台計算機可以有若干通訊埠,系統應當集中 (單例)管理這些通訊埠,以避免乙個通訊埠同時被兩個請求同時呼叫。總之,選擇單例模式就是為了避免不一致狀態,避免政出多頭。

綜上所述,單例模式就是為確保乙個類只有乙個例項,並為整個系統提供乙個全域性訪問點的一種方法。

package example01;

/** * 第一種方式:

* 靜態常量餓漢式

* 缺點:不管用不用到都例項化,造成資源浪費

*/public

class

singletontest01

}class

singleton

// 建立例項物件

private

final

static singleton instance =

newsingleton()

;public

static singleton getinstance()

}

package example02;

/** * 第二種方式:

* 靜態**塊餓漢式

* 缺點:不管用不用到都例項化,造成資源浪費

*/public

class

singletontest02

}class

singleton

private

static singleton instance;

static

public

static singleton getinstance()

}

package example03;

/** * 第三種方式:

* 餓漢式:用到時才例項化

* 執行緒不安全

*/public

class

singletontest03

}class

singleton

// 提供乙個靜態公有方法,使用時才載入

public

static singleton getinstance()

return instance;

}}

package example04;

/** * 第四種方式:

* 懶漢式

* 執行緒安全

* 缺點:效率太低

*/public

class

singletontest04

}class

singleton

// 提供乙個靜態公有方法,家兔同步處理的**,解決執行緒不安全問題

public

static

synchronized singleton getinstance()

return instance;

}}

package example05;

/** * 雙重檢查

*/public

class

singletontest05

}class

singleton

// 提供乙個靜態公有方法,加入雙重檢查**。解決執行緒不安全問題和懶載入問題

public

static

synchronized singleton getinstance()

}}return instance;

}}

package example06;

/** * 靜態內部類

*/public

class

singletontest06

}class

singleton

// 寫乙個靜態內部類

private

static

class

singleinstance

// 提供乙個靜態公有方法,返回singleinstance.instance

public

static singleton getinstance()

}

package example07;

/** * 列舉類

* 推薦使用

*/public

class

singletontest07

}enum singleton

}

設計模式 二 單例模式

建立乙個物件並不難,但當我們不得不為每新新增一種抽象類或介面而到處修改客戶 時,就不得不思考直接使用new建立物件帶來的高耦合。建立型別的模式將使用物件和 例項化物件 進行了分離。建立型別模式包括 單例模式 工廠方法模式 原型模式。下面先看單例模式 單例模式 保證乙個類在系統裡只有乙個例項化物件。應...

設計模式(二) 單例模式

單例模式 用來建立只能有乙個例項的物件。確保乙個類只有乙個例項,並提供乙個全域性訪問點。有的時候我們不希望乙個類被建立出多個物件,因為多個例項會帶來許多不好的影響。經典單例模式 public class singleinstance public static singleinstance geti...

設計模式(二)單例模式

單例模式 保證只有乙個物件,每次獲取物件獲取到的都是同乙個物件。單例模式是我們程式中最常見的設計模式,很多任務具類都設計成單例模式,spring中的bean也有單例,單他不是真正的單例。單例模式總結下來有幾種寫法,他們共性就是私有的構造方法。package com.designpattern.sin...