設計模式 單例模式

2021-07-25 22:37:44 字數 1395 閱讀 3670

單例模式

單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項

對於系統中的某些類來說,只有乙個例項很重要,例如,乙個系統中可以存在多個列印任務,但是只能有乙個正在工作的任務;乙個系統只能有乙個視窗管理器或檔案系統;乙個系統只能有乙個計時工具或id(序號)生成器。如在windows中就只能開啟乙個任務管理器。如果不使用機制對視窗物件進行唯一化,將彈出多個視窗,如果這些視窗顯示的內容完全一致,則是重複物件,浪費記憶體資源;如果這些視窗顯示的內容不一致,則意味著在某一瞬間系統有多個狀態,與實際不符,也會給使用者帶來誤解,不知道哪乙個才是真實的狀態。因此有時確保系統中某個物件的唯一性即乙個類只能有乙個例項非常重要。如何保證乙個類只有乙個例項並且這個例項易於被訪問呢?定義乙個全域性變數可以確保物件隨時都可以被訪問,但不能防止我們例項化多個物件。乙個更好的解決辦法是讓類自身負責儲存它的唯一例項。這個類可以保證沒有其他例項被建立,並且它可以提供乙個訪問該例項的方法。這就是單例模式的模式動機。

顯然單例模式的要點有三個;一是某個類只能有乙個例項二是它必須自行建立這個例項三是它必須自行向整個系統提供這個例

從具體實現角度來說,就是以下三點:一是單例模式的類只提供私有的建構函式,二是類定義中含有乙個該類的靜態私有物件,三是該類提供了乙個靜態的公有的函式用於建立或獲取它本身的靜態私有物件。

一般singleton模式通常有三種形式:

第一種形式:懶漢式,也是常用的形式。

public class singleton

return instance;

}private singleton()

}

第二種形式:餓漢式

public class singleton

//這裡提供了乙個供外部訪問本class的靜態方法,可以直接訪問

public static singleton getinstance()

}

第三種形式: 雙重鎖的形式。

public class singleton

public static singleton getinstance()}}

return instance;

}}

第四種:使用reentrantlock進行同步

public class singleton

public static singleton getinstance()

lock.lock();

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