保證乙個類只有乙個例項--即乙個物件,
並且提供乙個訪問該例項的全域性訪問點--即類中有乙個公共的方法--方法的返回該類的物件。
1.windows的任務管理器;--無論開啟多少次都只能開啟乙個視窗
2.windows的**站;
3.專案中的配置檔案;
4.**的計數器;
5.日誌;
6.連線池;
8.spring的bean--預設是單例
9.servlet
10.springmvc和struts2中,控制器物件
只生成乙個例項--減少了系統的效能開銷
1.餓漢式--常用;執行緒安全、呼叫效率高、不能延時載入--缺點。
2.懶漢式--常用;執行緒安全、呼叫效率低、延時載入。
3.雙重檢測鎖式--少用--執行緒安全、呼叫效率高、延時載入、偶爾出現問題--不建議使用。
4.靜態內部類式--少用;執行緒安全、呼叫效率高、延時載入。(也是一種懶載入方式)。
5.列舉單例式--少用;執行緒安全、呼叫效率高、不能延時載入、實現簡單--列舉本身就是單例模式。
package org.yxd.create;
/* * 專案名稱:designmode--設計模式學習
* 包名:org.yxd.create--建立型模式
* 類名:singletondemo1--單例模式之餓漢式
*/public class singletondemo1
//方法沒有同步,呼叫效率高
public static singletondemo1 getinstance()
}
1.私有的、static的類物件
2.私有的構造器
3.乙個共有的、static的方法--返回類的物件。
package org.yxd.create;
/* * 專案名稱:designmode--設計模式學習
* 包名:org.yxd.create--建立型模式
* 類名:singletondemo1--單例模式之懶漢模式
*/public class singletondemo2
//方法同步,呼叫效率低
public static singletondemo2 getinstance()
return instance;
}}
1.私有的、static的類物件--不new
2.私有的構造器
3.乙個共有的、static的方法--返回類的物件。--同步
package org.yxd.create;
/* * 專案名稱:designmode--設計模式學習
* 包名:org.yxd.create--建立型模式
* 類名:singletondemo3--單例模式之雙重檢測鎖
*/public class singletondemo3
//方法同步在if中,呼叫效率高,但有時會出問題,不建議使用
public static singletondemo3 getinstance()
}instance=sc;}}
} return instance;
}}
區別:
雙重檢測鎖與懶漢式的差別--將同步移動到if中,同時if中有兩sycnronized。
優勢:安全、高效、延遲載入。
問題原因:
1.編譯器優化
2.jvm底層內部模型
問題結果:
偶爾會出現問題。
package org.yxd.create;
/* * 專案名稱:designmode--設計模式學習
* 包名:org.yxd.create--建立型模式
* 類名:singletondemo4--單例模式之靜態內部類
*/public class singletondemo4
//構造方法
private singletondemo4(){}
//呼叫該方法,載入靜態內部類
public static singletondemo4 getinstance()
}
區別:
1.沒有static屬性--使用了內部類的屬性--不會立即載入
優勢:安全、高效、延遲載入。
package org.yxd.create;
/* * 專案名稱:designmode--設計模式學習
* 包名:org.yxd.create--建立型模式
* 類名:singletondemo5--單例模式之列舉模式
*/public enum singletondemo5
}
區別:1.使用列舉--本身就是單例
優勢:簡單、安全、高效
問題:立即載入。
占用占用少、不需要延時載入:
列舉好於 餓漢式
占用資源多,需要延時載入:
靜態內部類好於 懶漢式
設計模式1 單例模式
文章引用出處 singleton模式是最簡單最常用的設計模式。1,定義 確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個該類。2,單例模式優點 1 單例模式在記憶體中只有乙個例項,減少了記憶體的開支。2 單例模式只生成乙個例項模式,減少了系統效能的開銷。如當乙個物件的產生需要比較多的系統資...
設計模式1 單例模式
單例模式,利用工廠類只生產乙個例項或者有限個例項,比如乙個系統中只有乙個主機板,乙個顯示卡,但是有些系統中也可以存在多個,雙顯示卡,雙顯示器等等。這些在singleton module中都是可以定義的。當然我們也可以使用全域性的變數或者靜態類或者物件去做,但是單例模式的存在是有其優點的。public...
設計模式 單例模式 1
上三篇文章都是在講工廠模式,這篇就跟吉哥一起學習最常用的模式 單例模式。概念 在它的核心結構中只包含乙個被稱為單例的特殊類。分類 單例模式的形式也比較多,包涵以下8種 這裡是把懶漢和餓漢細分了 1 餓漢式 靜態常量 2 餓漢式 靜態 塊 3 懶漢式 不加鎖,執行緒不安全 4 懶漢式 同步方法,執行緒...