設計模式 單例模式

2021-07-07 02:45:15 字數 1610 閱讀 3949

單例模式

1.單例的定義(什麼是單例?)

單例模式是設計模式中使用最為普遍的模式之一。它是一種物件建立模式,用於產生乙個物件的具體例項,它可以確保系統中乙個類只產生乙個例項。

2.單例的工作原理

通過檢查記憶體,判斷是否已經存在單例物件,若存在則使用已存在的例項,否則新建立乙個例項。

3.單例的作用

1)對頻繁使用的物件,可以省略建立物件所花費的時間。這對於那些重量級物件而言,是非常可觀的一筆系統開銷;

2)由於new操作的次數減少,因而也會降低對系統記憶體的使用頻率,這將減輕gc的壓力,縮短gc停頓的時間

綜上所述,對於系統的關鍵元件和被頻繁使用的物件,使用單例模式便可以有效地改善系統的效能。

4.優、缺點

優點:

1)例項控制

單例模式會阻止其他物件例項化其自己的單例物件的副本,從而確保所有物件都訪問唯一例項。

2)靈活性

因為類控制了例項化過程,所以類可以靈活更改例項化過程。

缺點:

1)開銷

雖然數量很少,但如果每次物件請求引用時都要檢查是否存在類的例項,將仍然需要一些開銷。可以通過使用靜態初始化解決此問題。

2)可能的開發混淆

使用單例物件(尤其在類庫中定義的物件)時,開發人員必須記住自己不能使用new關鍵字例項化物件。因為可能無法訪問庫源**,因此應用程式開發人員可能會意外發現自己無法直接例項化此類。

3)物件生存期

不能解決刪除單個物件的問題。在提供記憶體管理的語言中(例如基於.net framework的語言),只有單例類能夠導致例項被取消分配,因為它包含對該例項的私有引用。在某些語言中(如 c++),其他類可以刪除物件例項,但這樣會導致單例類中出現懸浮引用。

5.helloworld

/**

*雙重鎖單例模式**

*/public

static

class

doublecheckedsingleton

// 獲得單例物件的方法

public

static doublecheckedsingleton getinstance()}}

return instance;}}

/***餓漢單例模式(推薦使用該方式)

**在類載入時就完成了初始化,所以類載入較慢,但獲取物件的速度快

*/public

class

eagersingleton

// 開放的靜態非同步方法(類載入時已經被初始化,不會有多執行緒的問題出現)

public

static eagersingleton getinstance()

}/**

*懶漢單例模式

**比較懶,在類載入時,不建立例項,因此類載入速度快,但執行時獲取物件的速度慢

*/public

class

lazysingleton

// 開放的靜態同步方法,用來獲取單例物件

public

static

synchronized lazysingleton getinstance()

return instance;

}}

設計模式 單例模式

單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...

設計模式 單例模式

class testsingleton static public function instance return self testsingleton private function clone public function setsinvar sinvar public function ...

設計模式 單例模式

單例模式的目的是保證類在系統中只被例項化一次,由該唯一的例項來為系統提供服務.單例模式主要用於保證服務的統一,比如獲取統一的編號服務,模仿oracle的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...