應用場景:
1、產生某物件會消耗過多的資源,為避免頻繁地建立與銷毀物件對資源的浪費。如: 對資料庫的操作、訪問實現方式io、執行緒池(threadpool)、網路請求等。
2、某種型別的物件應該有且只有乙個。如果製造出多個這樣的例項,可能導致:程式行為異常、資源使用過量、結果不一致等問題。如果多人能同時操作乙個檔案,又不進行版本管理,必然會有的修改被覆蓋,所以:
乙個系統只能有:乙個視窗管理器或檔案系統,計時工具或id(序號)生成器,快取(cache),處理偏好設定和登錄檔(registry)的物件,日誌物件。
3、 控制資源的使用,通過執行緒同步來控制資源的併發訪問
控制例項的產生,以達到節約資源的目的
控制資料的共享,在不建立直接關聯的條件下,讓多個不相關的程序或執行緒之間實現通訊
懶漢-執行緒不安全
public
class singleton
public
static singleton getinstance()
return singleton;
}}
懶漢-執行緒安全
public
class singleton
public
static synchronized singleton getinstance()
return singleton;
}}
同步**塊
public
class singleton
public
static singleton getinstance()
}return singleton;
}}
執行緒安全-雙重檢查鎖定
public
class singleton
public
static singleton getinstance()
}return singleton;
}}
靜態內部類
public
class singleton
public
static final singleton getinstance()
private
static
class singletonholder
}
餓漢式
public
class singleton
public
static final singleton instance = new singleton();
}
public
class singleton
public
static final singleton instance = new singleton();
public
static singleton getinstance()
}
public
class singleton
private
singleton()
public
static singleton getinstance()
}
列舉
public
enum singleton
}
登記式單例
public
class singletonmanager
private
static
void
registerserver(string key, object instance)
}public
static object getservice(string key)
}
造成單例模式失效的幾種場景及解決方案:
1、序列化
2、反射
public
class singleton
}}
3、轉殖 Java設計模式 單例模式
單例模式 singleton 顧名思義,就是乙個類只有乙個例項。作為物件的建立模式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。顯然單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。從具體...
java設計模式 單例模式
這個模式是很有意思,而且比較簡單,但是我還是要說因為它使用的是如此的廣泛,如此的有人緣,單例就是單 一 獨苗的意思,那什麼是獨乙份呢?你的思維是獨乙份,除此之外還有什麼不能山寨的呢?我們舉個比較難複製的物件 皇帝中國的歷史上很少出現兩個皇帝並存的時期,是有,但不多,那我們就認為皇帝是個單例模式,在這...
java設計模式 單例模式
單例模式介紹 單例模式分 懶漢式單例 餓漢式單例。單例模式有一下特點 1 單例類只能有乙個例項。2 單例類必須自己自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。單例有併發問題,只有乙個例項,多個執行緒就可能同...