亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

設(shè)計模式——單例模式(Singleton)

2019-11-10 20:22:38
字體:
供稿:網(wǎng)友

要想正確理解設(shè)計模式,首先必須明確它是為了解決什么問題而提出來的。

設(shè)計模式學(xué)習(xí)筆記

——Shulin

轉(zhuǎn)載請注明出處:http://blog.csdn.net/zhshulin

       

       單例模式屬于設(shè)計模式中的創(chuàng)建模式,即創(chuàng)建對象時,不再由我們直接實例化對象,而是根據(jù)特定場景,由程序來確定創(chuàng)建對象的方式,從而保證更大的性能、更好的架構(gòu)優(yōu)勢。

1、概念

        單例模式確保某個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例。選擇單例模式就是為了避免不一致狀態(tài)。使用Singleton的好處還在于可以節(jié)省內(nèi)存,因為它限制了實例的個數(shù),有利于java垃圾回收(garbage collection)。

       Singleton模式看起來簡單,使用方法也很方便,但是真正用好,是非常不容易,需要對Java的類 線程 內(nèi)存等概念有相當(dāng)?shù)牧私狻?/p>

       總之:如果你的應(yīng)用基于容器,那么Singleton模式少用或者不用,可以使用相關(guān)替代技術(shù)。

2、特點

   1)單例類只能有一個實例

     2)單例類必須自己創(chuàng)建自己的唯一實例

     3)單例類必須給所有其他對象提供這一實例

3、應(yīng)用舉例

    在很多操作中,比如建立目錄、數(shù)據(jù)庫連接都需要這樣的單線程操作。還有, singleton能夠被狀態(tài)化; 這樣,多個單態(tài)類在一起就可以作為一個狀態(tài)倉庫一樣向外提供服務(wù),比如,你要論壇中的帖子計數(shù)器,每次瀏覽一次需要計數(shù),單態(tài)類能否保持住這個計數(shù),并且能synchronize的安全自動加1,如果你要把這個數(shù)字永久保存到數(shù)據(jù)庫,你可以在不修改單態(tài)接口的情況下方便的做到。

 

    在計算機系統(tǒng)中,線程池、緩存、日志對象、對話框、打印機、顯卡的驅(qū)動程序?qū)ο蟪1辉O(shè)計成單例。這些應(yīng)用都或多或少具有資源管理器的功能。每臺計算機可以有若干個打印機,但只能有一個PRinter Spooler,以避免兩個打印作業(yè)同時輸出到打印機中。每臺計算機可以有若干通信端口,系統(tǒng)應(yīng)當(dāng)集中管理這些通信端口,以避免一個通信端口同時被兩個請求同時調(diào)用。

4、實現(xiàn)

    幾種常見單例模式實現(xiàn)方法。通用的單例模式創(chuàng)建思想:

1)使用private修改該類構(gòu)造器,從而將其隱藏起來,避免程序自由創(chuàng)建該類實例

        2)提供一個public方法獲取該類實例,且此方法必須使用static修飾(調(diào)用之前還不存在對象,因此只能用類調(diào)用)

        3)該類必須緩存已經(jīng)創(chuàng)建的對象,否則該類無法知道是否曾經(jīng)創(chuàng)建過實例,也就無法保證只創(chuàng)建一個實例。為此,該類需要一個靜態(tài)屬性來保持曾經(jīng)創(chuàng)建的實例。

4.1、餓漢模式

基本結(jié)構(gòu):

[java] view plain copy print?在CODE上查看代碼片public class EagerSingleton {      private static EagerSingleton instance = new EagerSingleton();      /**      * 私有默認(rèn)構(gòu)造方法      */      private EagerSingleton(){}      /**      * 靜態(tài)工廠方法      */      public static EagerSingleton getInstance(){          return instance;      }  }  

 %20 餓漢式是一種比較形象的稱謂。既然餓,那么在創(chuàng)建對象實例的時候就比較著急,于是在裝載類的時候就創(chuàng)建對象實例。餓漢式是典型的空間換時間,當(dāng)類裝載的時候就會創(chuàng)建類的實例,不管你用不用,先創(chuàng)建出來,然后每次調(diào)用的時候,就不需要再判斷,節(jié)省了運行時間。

4.2、懶漢模式基本結(jié)構(gòu):

[java] view%20plain copy print?package org.zsl.designmode;  /**  * 懶漢式,需要的時候才創(chuàng)建,典型的時間換空間  * @author ZSL  *  */  public class LazySingleton {      //靜態(tài)屬性用來緩存創(chuàng)建實例      private static LazySingleton instance = null;      //私有構(gòu)造方法避免程序自由創(chuàng)建實例      private LazySingleton(){}      //靜態(tài)公共方法用于取得該類實例      public static synchronized LazySingleton getLazySingletonInstance(){          if(instance == null){              instance = new LazySingleton();          }          return instance;      }  }  

 %20 %20上面的懶漢式單例類實現(xiàn)里對靜態(tài)工廠方法使用了同步化,以處理多線程環(huán)境。

 %20 %20懶漢式其實是一種比較形象的稱謂。既然懶,那么在創(chuàng)建對象實例的時候就不著急。會一直等到馬上要使用對象實例的時候才會創(chuàng)建,懶人嘛,總是推脫不開的時候才會真正去執(zhí)行工作,因此在裝載對象的時候不創(chuàng)建對象實例。

 

  懶漢式是典型的時間換空間,就是每次獲取實例都會進(jìn)行判斷,看是否需要創(chuàng)建實例,浪費判斷的時間。當(dāng)然,如果一直沒有人使用的話,那就不會創(chuàng)建實例,則節(jié)約內(nèi)存空間

 

  由于懶漢式的實現(xiàn)是線程安全的,這樣會降低整個訪問的速度,而且每次都要判斷。那么有沒有更好的方式實現(xiàn)呢?

4.3、雙重檢查加鎖

 %20 %20可以使用“雙重檢查加鎖”的方式來實現(xiàn),就可以既實現(xiàn)線程安全,又能夠使性能不受很大的影響。

 

  “雙重檢查加鎖”指的是:并不是每次進(jìn)入getInstance方法都需要同步,而是先不同步,進(jìn)入方法后,先檢查實例是否存在,如果不存在才進(jìn)行下面的同步塊,這是第一重檢查,進(jìn)入同步塊過后,再次檢查實例是否存在,如果不存在,就在同步的情況下創(chuàng)建一個實例,這是第二重檢查。這樣一來,就只需要同步一次了,從而減少了多次在同步情況下進(jìn)行判斷所浪費的時間。

 

  “雙重檢查加鎖”機制的實現(xiàn)會使用關(guān)鍵字volatile,它的意思是:被volatile修飾的變量的值,將不會被本地線程緩存,所有對該變量的讀寫都是直接操作共享內(nèi)存,從而確保多個線程能正確的處理該變量。

 

注意:在java1.4及以前版本中,很多JVM對于volatile關(guān)鍵字的實現(xiàn)的問題,會導(dǎo)致“雙重檢查加鎖”的失敗,因此“雙重檢查加鎖”機制只只能用在java5及以上的版本。

[java] view%20plain copy print?派生到我的代碼片package org.zsl.designmode;  /**  * 雙重檢查加鎖,既實現(xiàn)線程安全,又能夠使性能不受很大的影響  * @author ZSL  *  */  public class Singleton {      //被volatile修飾的變量的值,將不會被本地線程緩存,所有對該變量的讀寫都是直接操作共享內(nèi)存,從而確保多個線程能正確的處理該變量。      private volatile static Singleton instance = null;      //私有構(gòu)造方法      private Singleton(){};      //公共靜態(tài)方法獲取實例      public static Singleton getSingletonInstance(){          if(instance == null){   //先檢查實例是否存在,不存在,在進(jìn)行同步              synchronized (Singleton.class) {    //同步塊,線程安全的創(chuàng)建實例                  if(instance == null){   //再次檢查實例是否存在,如果不存在才真正的創(chuàng)建實例                      instance = new Singleton();                  }              }                        }          return instance;      }        }  

這種實現(xiàn)方式既可以實現(xiàn)線程安全地創(chuàng)建實例,而又不會對性能造成太大的影響。它只是第一次創(chuàng)建實例的時候同步,以后就不需要同步了,從而加快了運行速度。

 

  提示:由于volatile關(guān)鍵字可能會屏蔽掉虛擬機中一些必要的代碼優(yōu)化,所以運行效率并不是很高。因此一般建議,沒有特別的需要,不要使用。也就是說,雖然可以使用“雙重檢查加鎖”機制來實現(xiàn)線程安全的單例,但并不建議大量采用,可以根據(jù)情況來選用。

(原文地址:http://blog.csdn.net/zhshulin)


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
一区二区三区免费| 日韩成人精品在线观看| 永久在线免费观看| 伊是香蕉大人久久| 美女黄a一级视频| 九九精品视频在线| 一区二区三区国产豹纹内裤在线| 一区二区在线免费| 成年人视频免费在线播放| jlzzjlzz国产精品久久| 特级西西444www大精品视频| 欧美a在线看| 欧美videossex极品| 瑟瑟视频在线看| 欧美日韩精品二区| 羞羞的视频在线看| 国产精品久久久精品| 日韩免费高清| 日本中文不卡| 日韩视频www| 中文字幕在线播放不卡| 日本成人黄色| 国产麻豆高清视频在线第一页| 亚洲精品午夜级久久久久| 中文字幕三级电影| 中文字幕 亚洲一区| 韩国av免费在线观看| 国产精品久久久久久久蜜臀| 色噜噜夜夜夜综合网| 国产网站在线免费观看| 国产精品乡下勾搭老头1| 日本一区二区免费高清| 天天射天天综合网| 国产精品一区二三区| 亚洲综合另类| 午夜日韩福利| 国产精品一区二区a| 国产尤物视频在线| 一本久道综合久久精品| 日韩电影免费| 亚洲人成亚洲人成在线观看图片| 69sex久久精品国产麻豆| 成人在线视频首页| 超碰97在线人人| 毛片基地网站| 国产一级精品aaaaa看| 91视频免费看| 另类少妇人与禽zozz0性伦| 欧美精品电影免费在线观看| 日产精品一区二区| 国产日韩精品综合网站| 国产综合精品一区二区三区| 欧美福利第一页| 7777免费精品视频| 国产综合视频在线| 久久亚洲精品一区二区| 亚洲天堂久久av| 亚洲高清精品中出| 哺乳一区二区三区中文视频| 91精品国自产| 视频一区二区不卡| 高清不卡一区二区三区| 欧美日韩亚洲视频| 日韩中文字幕久久久经典网| 色悠悠久久综合| 日韩经典中文字幕在线观看| 自拍一级黄色片| 国产精品天天狠天天看| 酒色婷婷桃色成人免费av网| 精品噜噜噜噜久久久久久久久试看| 久久激情电影| 中国黄色片免费看| 午夜剧场在线免费观看| 日本男人天堂网| 国产精品久久久久久久久夜色| 亚洲线精品久久一区二区三区| 亚洲一区二区在线播放| 久久av资源网| 久久成人免费视频| 精品一区二区在线播放| 国产精品腿扒开做爽爽爽挤奶网站| 香蕉成人app免费看片| 波多野结衣mp4| 特黄特色欧美大片| 日韩色在线观看| 国产深夜男女无套内射| 日本在线免费观看视频| 久久精品99国产国产精| 欧美又大粗又爽又黄大片视频| 在线播放色视频| 日韩美女免费观看| 97av中文字幕| 亚洲国产aⅴ成人精品无吗| 亚洲国产精品久久久久久久| 精品久久久久久久久久中文字幕| 日本簧片在线观看| 亚洲精品视频网| 中文字幕亚洲欧洲| 超碰精品一区二区三区乱码| 在线观看17c| 日批视频免费在线观看| 日本一区二区三级电影在线观看| 不卡一二三区首页| 男人日女人的bb| 99久久久无码国产精品性| 久久久久999| 日本a在线播放| 久热re国产手机在线观看| 纪美影视在线观看电视版使用方法| 国产精品免费视频xxxx| 日本私人影院在线观看| 午夜在线小视频| 国v精品久久久网| 三区四区在线观看| 九七电影院97理论片久久tvb| 蜜桃精品视频在线| 欧美日韩精品在线观看| 日韩精品黄色网| 日本久久国产| 国产精品视频区| 久久久久麻豆v国产精华液好用吗| 最近的中文字幕在线看视频| 国卡一卡二卡三免费网站| 国产成人精品一区二区三区在线观看| 亚洲欧美日韩在线高清直播| 放荡的美妇在线播放| 最近最新mv在线观看免费高清| 在线永久看片免费的视频| 日本精品在线| 3d动漫精品啪啪1区2区免费| 亚洲成a人片777777久久| 樱花视频在线免费观看| 真实国产乱子伦对白视频| 亚洲精品久久久久中文字幕欢迎你| 欧美一级大片在线免费观看| 久久久久99精品一区| 日韩经典中文字幕一区| 黄网页免费在线观看| 十八禁视频网站在线观看| 色婷婷在线视频| av午夜一区麻豆| 久久成人亚洲| 日本精品视频在线播放| 亚洲激情六月丁香| 亚洲男人的天堂在线aⅴ视频| 久久久久久久久久久免费| 日本欧美精品久久久| 91国产精品一区| 九九免费视频| 国产精品免费在线视频| 激情婷婷综合网| 日韩女优av电影在线观看| 无码人妻精品中文字幕| 国产91精品久久久| 亚洲美女久久久| 国产精品亚洲综合色区韩国| 丝袜美腿av在线| gogo人体一区| 自拍偷拍欧美日韩| 九色丨porny丨自拍入口| 69国产成人精品视频软件| 97人澡人人添人人爽欧美| 久久字幕精品一区| 久久视频免费观看| 日韩人体视频| 一级日本不卡的影视| 精品美女被调教视频大全网站| 精品欧美色视频网站在线观看| 国产激情一区二区三区在线观看| 91av国产在线| 成人一区二区在线| 亚洲美女在线观看| 亚洲爆乳无码专区| 91精品无人成人www| 日韩欧美在线视频| 欧美亚洲丝袜| 你懂的在线免费观看| 精品人妻一区二区三区潮喷在线| 国产极品视频| 刘亦菲久久免费一区二区| 5g成人永久免费影院| 久久久久久久久综合| www.99久久热国产日韩欧美.com| 日韩免费一区二区三区| 国产成人亚洲综合a∨婷婷| 欧美xxxx做受欧美护士| 男人天堂新地址| 国内精彩免费自拍视频在线观看网址| 一区二区三区四区在线视频| www.成人69.com| 69日本xxxxxxxxx49| 亚州精品视频| 蜜桃日韩视频| 国产三区在线播放| 9色porny| 全部免费的黄色毛片| 中文字幕久热精品在线视频| 国产亚洲电影| 男插女视频久久久| 亚洲成人教育av| 18禁男女爽爽爽午夜网站免费| 国产精品第1页| gratisvideos另类灌满| 日韩一区二区三区三四区视频在线观看| 中文字幕不卡在线视频极品| 国产成人三级视频| 精品卡1卡2卡三卡免费网站| 国产一区二区精品在线| 99视频精品免费| 亚州视频一区二区三区| 91久久人澡人人添人人爽欧美| 精品国产乱码91久久久久久网站| 99在线免费观看| 国产视频精品在线| 久久99青青精品免费观看| 日韩av在线看| 色婷婷精品久久二区二区蜜臂av| 欧美亚洲视频在线观看| 久久久av水蜜桃| 国产中文字幕亚洲| 亚洲欧美在线第一页| 欧美色图天堂| 久久国产精品免费一区二区三区| 7777精品伊人久久久大香线蕉超级流畅| 暗呦丨小u女国产精品| 男女视频在线观看网站| 精品国产一区二区三区久久久蜜臀| 97国产在线观看| 妺妺窝人体色www在线小说| 国产伦理片在线观看| 久久婷婷五月综合色丁香| 99日韩精品| 欧美a v在线播放| 欧洲一区在线电影| 青青草视频导航| 国产色视频在线| 日韩精品中文字幕在线观看| 99久久99视频只有精品| 亚洲v中文字幕| 首页国产欧美日韩丝袜| 久久免费看少妇高潮v片特黄| 久久男人av资源站| 欧美18xxxx| 国产夫妻在线| 久久国产精品色婷婷| 最新版天堂中文在线官网| av有码在线观看| 亚洲人成电影院色| 亚洲精品高清国产一线久久| 97福利电影| 免费污视频在线一区| 91首页免费视频| 紧身裙女教师波多野结衣| 久久影院一区二区三区| 亚洲精品手机在线观看| 五月天色网站| 午夜久久中文| 老熟妻内射精品一区| 澳门av一区二区三区| 老女人av在线| 91免费观看国产| 天堂在线视频网站| 91麻豆国产福利在线观看| 色综合久久综合中文综合网| 亚洲 欧美综合在线网络| 精品视频色一区| 精品偷拍一区二区三区在线看| wwwav91| 欧类av怡春院| 国产精品人人做人人爽| 欧美日韩在线视频免费观看| 国产成人精品一区二区三区| 亚洲精品国产品国语在线app| 粗暴91大变态调教| 欧美日韩高清在线一区| 久久综合色鬼综合色| 国产美女高潮在线| 久久一区二区电影| av女优在线| 99久久精品免费看国产四区| 日本视频在线观看| 国内精品不卡一区二区三区| 成人av免费在线播放| 欧美变态口味重另类| 国产午夜精品一区二区三区四区| 小视频在线播放| 9191在线播放| 激情图片在线观看高清国产| 中文字幕a在线观看| 美女被久久久| 日韩欧美高清dvd碟片| 丁香久久综合| 亚洲bt欧美bt日本bt| 欧美激情一二三区| 色综合天天天天做夜夜夜夜做| 中文字幕在线观看视频网站| 日韩在线精品强乱中文字幕| 微拍福利一区二区| 在线观看福利电影| 国产成+人+综合+亚洲欧洲| 亚洲第一页在线播放| 欧美黑粗硬大| 91丨九色丨蝌蚪丨老板| 天天色综合天天| 最新版天堂资源在线| 香蕉精品999视频一区二区| 四虎影院中文字幕| 午夜免费福利网站| xxxxx性| 星空影院最新电视剧免费观看| 欧美在线看片a免费观看| 一区二区三区欧美精品| 78m国产成人精品视频| 日本激情在线观看| 精品婷婷伊人一区三区三| 日韩无一区二区| 亚洲视频狠狠干| 日韩精品视频免费在线观看| av在线观看地址| 国产欧美日韩中文久久| 国产又粗又猛又色| 玖草视频在线| 福利视频导航网| 加勒比海盗1在线观看免费国语版| 成人黄色小视频在线观看| 国产精品18在线| 色香阁99久久精品久久久| 最新中文字幕免费|