簡單理解設計模式之單例模式
阿新 • • 發佈:2019-02-20
1.什麼是單例模式?我們為什麼要用單例模式?
首先我們要知道我們為什麼要用單例模式,其實在很多的時候我們都用到了單例模式,這也是很經常要用到的,比如一個物件我們只需要它例項化一次,不允許它任意的建立。其實這就是單例模式,就是我們要一個物件只例項化一次,比如資料庫的連線。。
2.單例模式有哪些?
常用的單例模式分為兩種:一種是懶漢模式,另一種是餓漢模式。
3.怎麼理解這兩種常用的單例模式?
(1)餓漢模式:其實就是先例項化我們需要建立的單例物件。 ---餓壞了,迫不及待的想吃東西,就叫做餓漢模式。 (2)懶漢模式:當我們需要用到單例物件的時候再例項化。 ---你不用,我就不例項化。 但是總的來說建立單例模式的基本步驟是一樣的:步驟如下:
第一步:例項化該類的建構函式,
第二步:私有靜態化例項物件,保證只在本類執行
第三步:返回一個共有的函式,返回該例項物件
4.通過程式碼來說詳細的講解:
(1)餓漢模式(2)懶漢模式public class HungrySingleTon { private static HungrySingleTon instance = new HungrySingleTon();//迫不及待的想吃東西--建立物件 private HungrySingleTon(){ } public static HungrySingleTon getInstance(){ return instance; } }
public class LazySingleTon {
private static LazySingleTon instance;//很懶啊,不想建立,因為沒有用到
private LazySingleTon(){
}
public static LazySingleTon getInstance(){
if(instance == null){
instance = new LazySingleTon();
}
return instance;
}
}
5.上面兩種各單例模式的“變種”(也是常用的):
(1)靜態內部類的方法
(2)雙重檢測,執行緒安全的(但不是保證百分百安全)public class CommonSingleTon { private static class SingleTon{ private static CommonSingleTon instance = new CommonSingleTon(); } private CommonSingleTon(){ } public static CommonSingleTon getInstance(){ return SingleTon.instance; } }
public class SingleTon {
private volatile static SingleTon instance = null;
private SingleTon(){}
public static SingleTon getSingleTonInstance(){
if(instance==null){
synchronized (SingleTon.class) {
if(instance == null){
return instance = new SingleTon();
}
}
}
return instance;
}
}
單例模式其實還有很多的變種,比如同步方法,LockL的方法等等,還有列舉的方法,但是都離不開他的概念,工作中可以慢慢的體會檢索。
有不對的地方歡迎指教。