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