簡述單例設計模式的一些理解及代碼實現

單例設計模式

從特徵上講:
1,單例類只可有一個實例
2,單例類需自己創建唯一實例
3,需要給其他對象提供這一實例

從作用和目的上來說:
保證在應用程序中,一個類只有一個實例存在

代碼格式上來講:
1,私有的構造函數
2,私有的靜態的全局變量
3,公有的靜態的方法

從形式上來說有以下幾種:
懶漢式:使用的時候再實例化(延時加載)
代碼實現 (線程不安全,但效率高)
public class Singleton{
private static Singleton instance;
private Singleton(){};
public static Singleton getInstance(){
if(instance==null){
instance=new Singleton();
}
return instance;
}
}
線程安全的懶漢式
public class Singleton{
private static Singleton instance;
private Singleton(){};
public static synchronized Singleton getInstance(){
if(instance==null){
instance=new Singleton();
}
return instance;
}
}

餓漢式(線程安全,jvm啓動,不論你使不使用都先實例化,寫法簡單,不用考慮多線程問題,但效率低)
代碼實現:
public class Singleton{
private static Singleton instance=new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}

雙重校驗鎖
public class Singleton {
private volatile static Singleton instance;
private Singleton (){}
public static Singleton getIntance() {
if (instance== null) {
synchronized (Singleton.class) {
if (instance== null) {
instance= new Singleton();
}
}
}
return instance;
}
}

還有一種登記式單例類,因爲不常用(ps:主要是我也不會),在這就不寫了;

再隨便說一下比較常見的應用場景:
常見應用場景多見於日誌,應用配置,網站計數器什麼的;
使用條件:
資源共享情況下,用它避免一些資源操作時導致的性能損耗和資源浪費

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章