設計模式 單例模式

2021-10-02 23:47:35 字數 2267 閱讀 3677

這種模式涉及到乙個類,該類負責建立自己的物件,同時確保只有乙個物件被建立。

這種設計模式的實現有幾種方式:

懶漢模式

/**

* @description: 懶漢模式,執行緒不安全

*/public class singletondemo

// 單例物件

private static singletondemo instance = null;

// 靜態工廠方法

public static singletondemo getinstance()

return instance;

}}

進過改造,在工廠方法上加synchronized, 會變成執行緒安全。但是synchronized會導致效能下降。

/**

* @description: 懶漢模式,安全

*/public class singletondemo

// 單例物件

private static singletondemo instance = null;

// 靜態工廠方法

public static synchronized singletondemo getinstance()

return instance;

}}

再次改造,由於指令重排,導致執行緒不安全。

/**

* @description: 懶漢模式(雙重檢測機制),執行緒不安全

*/public class singletondemo

// 單例物件

private static singletondemo instance = null;

/*** 靜態工廠方法

* instance = new singletondemo(); 會執行三步操作

* 1、分配物件的記憶體空間

* 2、載入初始化物件

* 3、設定instance 指向剛分配的記憶體

* 在多執行緒情況下會發生指令重排,例如會導致執行順序變為 1、3、2

* 下面 a執行緒執行到第3步,指向了記憶體,b執行緒這時候判斷 instance不為空,就會直接返回

* 繼續使用b執行緒返回結果會導致出錯

* @return

*/public static singletondemo getinstance() }}

return instance;

}}

再次改造,使用volate修飾,保證不會發生執行緒重排。

/**

* @description: 懶漢模式,執行緒安全

*/public class singletondemo

// 單例物件

private volatile static singletondemo instance = null;

/*** 靜態工廠方法

* @return

*/public static singletondemo getinstance() }}

return instance;

}}

餓漢模式

/**

* @description: 餓漢模式,執行緒安全。單例例項在類裝載時進行建立。

* 初始化時候,如果有太多操作,會導致類載入很慢,可能會引起效能問題及如果不適用則造成資源浪費

*/public class singletondemo

// 單例物件

private static singletondemo instance = new singletondemo();

// 靜態工廠方法

public static singletondemo getinstance()

}

列舉模式

/**

* @description: 列舉模式,執行緒安全

*/public class singletondemo

/*** 靜態工廠方法

* @return

*/public static singletondemo getinstance()

private enum singleton

public singletondemo getinstance()

}}

設計模式 單例模式

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