設計模式 單例模式

2021-09-29 00:14:15 字數 1340 閱讀 4563

在學習mybatis或者hibernate中,有乙個sqlsessionfactory物件。此物件屬於重量級物件,消耗的資源比較大,也只需要存在乙個即可。類似的物件還有,執行緒池、快取、日誌等。這種情況下,就可以使用單例模式來進行控制物件的建立,確保只存在乙個。

懶漢的的單例模式顧名思義就是,在使用前就已經完成的初始化。

**:

public class hungrysingleton 

public static hungrysingleton getsingleton()

}

這樣的寫法很簡單,但由於在類裝載時就完成了初始化,可能會造成一定的資源浪費,但是不存在多執行緒的問題,比較常見。

**:

public class statichungrysingleton 

private static class singleton

public statichungrysingleton getsingleton()

}

相對於上面的方法,靜態內部類實現了延遲載入的效果,當statichungrysingleton 呼叫getsingleton()方法時,才會觸發靜態內部類的初始化過程。

餓漢模式是在類裝載的時候就完成了初始化,懶漢模式在被呼叫的時候才進行初始化,不會造成記憶體的浪費問題。

**:

public class lazysingleton 

public static lazysingleton getlazysingleton()

return lazysingleton;

}}

在多執行緒中,乙個執行緒準備建立乙個物件,這時另乙個執行緒進入if條件判斷中,此時物件還未建立,兩個執行緒都將建立物件。

懶漢—version2.0

public class lazysingleton 

//同步

public static synchronized lazysingleton getlazysingleton()

return lazysingleton;

}}

一整個方法加上synchronized進行同步,對效能而言會存在很大的問題,再進一步改進。

懶漢—version3.0

public class lazysingleton 

//同步

public static synchronized lazysingleton getlazysingleton() }}

return lazysingleton;

}}

設計模式 單例模式

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