確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。
單例模式分為餓漢模式和懶漢模式
/**
* 餓漢模式(靜態常量),即在類載入的時候就例項化
*/public class singletonpattern
public static singletonpattern getinstance()
}
這種寫法就是餓漢模式,在類載入的時候就進行單例物件的例項化,避免了同步問題。不過有一點不好的是,如果該單例物件沒有被使用的話,就會造成記憶體浪費。
/**
* 餓漢模式(靜態**塊),即在類載入的時候就例項化
*/public class singletonpattern2
private singletonpattern2()
public static singletonpattern2 getinstance()
}
這個寫法和上面大同小異,只不過是把單例物件的例項化放在靜態**段中,同樣,這也是執行緒安全的。
/**
* 懶漢模式(同步方法)
*/public class singletonpattern3
public static synchronized singletonpattern3 getinstance()
return instance;
}}
這種寫法就是通過同步方法實現的懶漢模式,雖然避免了同步問題,但是由於在方法上加了同步關鍵字,故效率會不理想。
/**
* 雙重檢查
*/public class singletonpattern4
public static singletonpattern4 getinstance() }}
return instance;
}}
這種寫法使用了雙重檢查的思想,單例物件instance要宣告為volatile,這樣在第二次檢查instance是否為null的時候就能起到同步作用,所以該寫法是執行緒安全的。
/**
* 靜態內部類方式
*/public class singletonpattern5
private static class singletoninstance
public static singletonpattern5 getinstance()
}
這種寫法利用了jvm載入類機制的特點來保證單例物件只例項化一次,因為jvm在載入類和初始化的時候只有乙個執行緒,這樣就保證了執行緒安全。 設計模式 單例模式
單例模式 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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...