設計模式 單例模式

2021-07-27 07:42:54 字數 1161 閱讀 7936

單例模式:保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。

比如說某類a將構造方法私有化,這樣就不能在類a以外的地方建立類a的例項了,是否建立類a的例項只能由類a本身決定。雖然外界不能直接建立類a的例項,但是類a提供了乙個方法(getinstance()),該方法返回乙個類a的物件,使得外界可以獲取類a的例項來使用。

簡單來說就是乙個類被計畫生育了(沒開放二胎,只準生乙個),計畫生育保證了程式執行期間始終只存在乙個該類的例項。

我們都學過魯迅的孔乙己,孔乙己對魯迅說:你知道茴香豆的茴有幾種寫法嗎?。其實單例模式也是有好幾種寫法的,不同的寫法有不同的特點,下面介紹幾種單例模式的寫法。

一、餓漢式

public class singleman

/*** 該類中獲得該類物件的唯一方法

* @return instance

*/public static singleman getinstance()

}餓漢式,該方法利用了static關鍵字的屬性,使得在該類載入的時候就建立該類的乙個的例項。該方法保證了在程式執行期間只存在乙個該類物件,也消除了併發的安全問題,缺點是在類載入時候就占用系統資源。

二、懶漢式

public class singlepeople

/*** 懶漢式,雙重檢查加鎖

* @return peopleinstance;

*/public static singlepeople getinstance()

}return peopleinstance;

}public void method1()

public void method2()

}getinstance方法保證了第一次呼叫被呼叫時建立它的例項。懶漢式中如果沒有雙重檢查加鎖的話,是執行緒不安全的,因為,如果當兩個執行緒同時呼叫getinstance()方法並且此時peopleinstance此時為空,就有可能建立該類的多個物件。

三、使用靜態內部類

public class singlewomen

private static class singlewomenholder

public static singlewomen getinstance()

}延遲載入,當呼叫getinstance方法時才初始化singlewomen,並且返回singlewomen的乙個物件。

設計模式 單例模式

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