單例設計模式
singleton是一種建立型模式,指某個類採用singleton模式,則在這個類被建立後,只可能產生乙個例項供外部訪問,並且提供乙個全域性的訪問點。
核心知識點如下:
(1) 將採用單例設計模式的類的構造方法私有化(採用private修飾)。
(2) 在其內部產生該類的例項化物件,並將其封裝成private static型別。
(3) 定義乙個靜態方法返回該類的例項。
/**方法一就是傳說的中的餓漢模式* 方法一
* 單例模式的實現:餓漢式,執行緒安全 但效率比較低
*/
public class singletontest
// 將自身的例項物件設定為乙個屬性,並加上static和final修飾符
private static final singletontest instance = new singletontest();
// 靜態方法返回該類的例項
public static singletontest getinstancei()
}
優點是:寫起來比較簡單,而且不存在多執行緒同步問題,避免了synchronized所造成的效能問題;
缺點是:當類singletontest被載入的時候,會初始化static的instance,靜態變數被建立並分配記憶體空間,從這以後,這個static的instance物件便一直佔著這段記憶體(即便你還沒有用到這個例項),當類被解除安裝時,靜態變數被摧毀,並釋放所占有的記憶體,因此在某些特定條件下會耗費記憶體。
/**方法二就是傳說的中的飽漢模式*方法二
* 單例模式的實現:飽漢式,非執行緒安全
*
*/
public class singletontest
// 定義乙個singletontest型別的變數(不初始化,注意這裡沒有使用final關鍵字)
private static singletontest instance;
// 定義乙個靜態的方法(呼叫時再初始化singletontest,但是多執行緒訪問時,可能造成重複初始化問題)
public static singletontest getinstance()
}
優點是:寫起來比較簡單,當類singletontest被載入的時候,靜態變數static的instance未被建立並分配記憶體空間,當getinstance方法第一次被呼叫時,初始化instance變數,並分配記憶體,因此在某些特定條件下會節約了記憶體;
缺點是:併發環境下很可能出現多個singletontest例項。
/**方法三為方法二的簡單優化*方法三
* 單例模式的實現:飽漢式,執行緒安全簡單實現
*
*/
public class singletontest
// 定義乙個singletontest型別的變數(不初始化,注意這裡沒有使用final關鍵字)
private static singletontest instance;
// 定義乙個靜態的方法(呼叫時再初始化singletontest,使用synchronized 避免多執行緒訪問時,可能造成重的復初始化問題)
public static synchronized singletontest getinstance()
}
優點是:使用synchronized關鍵字避免多執行緒訪問時,出現多個singletontest例項。
缺點是:同步方法頻繁呼叫時,效率略低。
/**方法四為單例模式的最佳實現。記憶體占用地,效率高,執行緒安全,多執行緒操作原子性。* 方法四
* 單例模式最優方案
* 執行緒安全 並且效率高
* */
public class singletontest
//定義乙個靜態私有變數(不初始化,不使用final關鍵字,使用volatile保證了多執行緒訪問時instance變數的可見性,避免了instance初始化時其他變數屬性還沒賦值完時,被另外執行緒呼叫)
private static volatile singletontest instance;
//定義乙個共有的靜態方法,返回該型別例項
public static singletontest getistance()
}
}
return instance;
}
}
設計模式 單例模式
單例模式 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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...