国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

簡單講解在Java編程中實現設計模式中的單例模式結構

2019-11-26 14:25:47
字體:
來源:轉載
供稿:網友

1. 模式介紹

模式的定義

確保某一個類只有一個實例,而且自行實例化并向整個系統提供這個實例。

模式的使用場景

確保某個類有且只有一個對象的場景,例如創建一個對象需要消耗的資源過多,如要訪問 IO 和數據庫等資源。

2. UML類圖

201642293056020.png (600×189)

角色介紹:
(1)Client : 高層客戶端。
(2)Singleton : 單例類。

3. 模式的簡單實現

public class Singleton {   private static Singleton intance;   private Singleton() {}      public static Singleton getInstance() {     /*      * 一開始多線程進來,遇到鎖,一個線程進去,是為空,new對象; 后續線程進入,不為空,不操作;最后直接返回      * 對象不為空,再有多個線程進入該函數,不為空,不執行加鎖操作,直接返回      */     if (intance == null) {       synchronized (Singleton.class) {         if (intance == null) {           intance = new Singleton();         }       }     }     return intance;   } }  class Singleton1 {// 懶漢式    private static Singleton1 intance = new Singleton1();//懶的,程序運行的時候就加載出來了   private Singleton1() {}      public static Singleton1 getInstance() {     return intance;   } }  class Singleton2 {// 餓漢式   private static Singleton2 intance;   private Singleton2() {}      public static Singleton2 getInstance() {//用到的時候 才加載     if (intance == null) {       intance = new Singleton2();     }     return intance;   } }  class Singleton3 {// 餓漢式 線程安全   private static Singleton3 intance;   private Singleton3() {}      public synchronized static Singleton3 getInstance() {//用到的時候 才加載, 加鎖 多線程調用,都有一個加鎖的動作     if (intance == null) {       intance = new Singleton3();     }     return intance;   } }  class Singleton4 {// 餓漢式 線程安全   private static Singleton4 intance;   private Singleton4() {}      public static Singleton4 getInstance() {//用到的時候 才加載     synchronized (Singleton4.class) {// 加鎖 效率跟3差不多       if (intance == null) {         intance = new Singleton4();       }     }     return intance;   } } 

4.優點與缺點

(1)優點:

A.由于單例模式在內存中只有一個實例,減少了內存開支,特別是一個對象需要頻繁地創建、銷毀時,而且創建或銷毀時性能又無法優化,單例模式的優勢就非常明顯。
B.由于單例模式只生成一個實例,所以減少了系統的性能開銷,當一個對象的產生需要比較多的資源時,如讀取配置、產生其他依賴對象時,則可以通過在應用啟動時直接產生一個單例對象,然后用永久駐留內存的方式來解決;
C.單例模式可以避免對資源的多重占用,例如一個寫文件動作,由于只有一個實例存在內存中,避免對同一個資源文件的同時寫操作。
D.單例模式可以在系統設置全局的訪問點,優化和共享資源訪問,例如可以設計一個單例類,負責所有數據表的映射處理。

(2)缺點
A.單例模式一般沒有接口,擴展很困難,若要擴展,除了修改代碼基本上沒有第二種途徑可以實現。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 刚察县| 屏山县| 盐山县| 噶尔县| 共和县| 九江县| 武穴市| 灵寿县| 三明市| 宜州市| 石泉县| 盐津县| 隆尧县| 清徐县| 琼中| 岢岚县| 和政县| 宁明县| 都昌县| 合江县| 四子王旗| 洮南市| 灌阳县| 五家渠市| 万载县| 巴塘县| 卢龙县| 乐清市| 靖西县| 白河县| 大关县| 卢氏县| 岱山县| 新平| 昌图县| 江达县| 红桥区| 连江县| 镇赉县| 临城县| 涞源县|