單例模式
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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...