亚洲视频在线一区二区三区_色婷婷AV一区二区三区浪潮_亚洲综合无码精品一区二区三区_高清精品一区二区三区一区

在Java中應(yīng)用設(shè)計(jì)模式Singleton

作者:
2010-05-06
2379
基本概念

  Singleton 是一種創(chuàng)建性模型,它用來確保只產(chǎn)生一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn).對一些類來說,保證只有一個(gè)實(shí)例是很重要的,比如有的時(shí)候,數(shù)據(jù)庫連接或 Socket 連接要受到一定的限制,必須保持同一時(shí)間只能有一個(gè)連接的存在.再舉個(gè)例子,集合中的 set 中不能包含重復(fù)的元素,添加到set里的對象必須是唯一的,如果重復(fù)的值添加到 set,它只接受一個(gè)實(shí)例.JDK中正式運(yùn)用了Singleton模式來實(shí)現(xiàn) set 的這一特性,大家可以查看java.util.Collections里的內(nèi)部靜態(tài)類SingletonSet的原代碼.其實(shí)Singleton是最簡單但也是應(yīng)用最廣泛的模式之一,在 JDK 中隨處可見.

  簡單分析

  為了實(shí)現(xiàn) Singleton 模式,我們需要的是一個(gè)靜態(tài)的變量,能夠在不創(chuàng)建對象的情況下記憶是否已經(jīng)產(chǎn)生過實(shí)例了.靜態(tài)變量或靜態(tài)方法都可以在不產(chǎn)生具體實(shí)例的情況下直接調(diào)用,這樣的變量或方法不會因?yàn)轭惖膶?shí)例化而有所改變.在圖1的結(jié)構(gòu)中可以看到,uniqueInstance 就是這個(gè)獨(dú)立的靜態(tài)變量,它可以記憶對象是否已經(jīng)實(shí)例化了,在靜態(tài)方法 Instance 中對這個(gè)變量進(jìn)行判斷,若沒有實(shí)例化過就產(chǎn)生一個(gè)新的對象,如果已經(jīng)實(shí)例化了則不再產(chǎn)生新的對象,仍然返回以前產(chǎn)生的實(shí)例.

  圖1: Singleton 模式結(jié)構(gòu)

具體實(shí)施

  實(shí)現(xiàn) Singleton 模式的辦法通常有三種.

  一. 用靜態(tài)方法實(shí)現(xiàn) Singleton 這種方法是使用靜態(tài)方法來監(jiān)視實(shí)例的創(chuàng)建.為了防止創(chuàng)建一個(gè)以上的實(shí)例,我們最好把構(gòu)造器聲明為 private.

  這樣可以防止客戶程序員通過除由我們提供的方法之外的任意方式來創(chuàng)建一個(gè)實(shí)例,如果不把構(gòu)造器聲明為private,編譯器就會自作聰明的自動(dòng)同步一個(gè)默認(rèn)的friendly構(gòu)造器.這種實(shí)現(xiàn)方法是最常見的,也就是圖1中結(jié)構(gòu)的標(biāo)準(zhǔn)實(shí)現(xiàn).

singletonTest運(yùn)行結(jié)果是:

  Creating one instance

  Creating two instance

  Only one instance allowed

  可以看出,第一個(gè)實(shí)例順利創(chuàng)建,第二個(gè)實(shí)例創(chuàng)建實(shí)拋出了我們自定義的異常.

  三. 用注冊器機(jī)制來創(chuàng)建 Singleton 首先用集合中的Hashtable 和Enumeration來實(shí)現(xiàn)addItem(Object key, Object value),getItem(Object key), ,removeItem(Object key)等方法實(shí)現(xiàn)一個(gè)管理器,將key和value一一關(guān)聯(lián)起來,客戶程序員創(chuàng)建實(shí)例前首先用addItem方法進(jìn)行注冊,再用getItem方法獲取實(shí)例.Hashtable中的key是唯一的,從而保證創(chuàng)建的實(shí)例是唯一的,具體實(shí)現(xiàn)限于篇幅不再細(xì)說,在Prototype模型的應(yīng)用一文中我將會給出一個(gè)實(shí)現(xiàn)注冊器的代碼.用注冊器機(jī)制來創(chuàng)建 Singleton模式的好處是易于管理,可以同時(shí)控制多個(gè)不同類型的Singleton 實(shí)例.

  小結(jié)

  Singleton模式可以方便的進(jìn)行擴(kuò)充,產(chǎn)生指定數(shù)目的實(shí)例.

  在The Design Patterns Java Companion 一書中曾提到過用靜態(tài)類的方式來實(shí)現(xiàn) Singleton模式,并指出java.lang.Math就是一個(gè)例子,這里我并不表示贊同,因?yàn)镸ath并不是一個(gè)真正的對象,我們只是直接調(diào)用Math類所包裝的靜態(tài)方法而已,根本就沒有創(chuàng)建實(shí)例的過程,又從何說起只產(chǎn)生一個(gè)實(shí)例呢?這個(gè)問題我曾到Javaranch的論壇上發(fā)過帖子,所有回帖的人也都是對這一觀點(diǎn)持否定態(tài)度. 

  在多線程的程序中,singleton可能會變的不可靠,可能會出現(xiàn)多個(gè)實(shí)例,解決的辦法很簡單,加個(gè)同步修飾符: public static synchronized Singleton getInstance(). 這樣就保證了線程的安全性. 

  最后要說的是大家可能會看見一些其他實(shí)現(xiàn)Singleton模式的方法,因?yàn)槟J皆诰唧w的應(yīng)用時(shí)是靈活的,不是一成不變的,并沒有一個(gè)固定的做法,但大都是上面幾種方法的變形. 

0
0
分享到:

0

喜歡他,就推薦他上首頁吧^_^

推薦閱讀

×

賽事服務(wù)聯(lián)系方式

0371-86068866

4008887269

cndesign@163.com

好的,我知道了

官方微信

聯(lián)系我們

  • QQ:33143335 QQ:1904200230
  • 電話:18569912460
  • 投稿:cndesign@163.com
  • 地址:鄭州市國家大學(xué)科技園東區(qū)9號樓2層

版權(quán)信息

  移動(dòng) Android 版 豫 ICP 備16038122號-2 豫公網(wǎng)安備 41019702002261號

亚洲视频在线一区二区三区_色婷婷AV一区二区三区浪潮_亚洲综合无码精品一区二区三区_高清精品一区二区三区一区

      国产精品天天看| 国产精品美女久久久久久免费| 免费观看日韩| 玖玖玖国产精品| 欧美精品www在线观看| 欧美午夜不卡| 国产午夜一区二区三区| 一区在线观看| 亚洲视频免费在线| 久久成人久久爱| 欧美精品入口| 国产夜色精品一区二区av| 激情综合久久| 亚洲小说欧美另类婷婷| 久久久久成人网| 欧美激情女人20p| 国产一区二区精品久久91| 亚洲黄色av一区| 翔田千里一区二区| 裸体歌舞表演一区二区| 国产精品久久久久久久久免费桃花 | 免费在线观看一区二区| 欧美日韩一卡| 国产婷婷精品| 亚洲麻豆国产自偷在线| 亚洲视频在线二区| 美腿丝袜亚洲色图| 欧美视频日韩| 亚洲精品一区二区三区蜜桃久| 一本色道久久综合狠狠躁的推荐| 久久精品一区二区| 欧美日韩精品欧美日韩精品一 | 老司机免费视频久久| 欧美成人精精品一区二区频| 国产精品视频一| 亚洲激情黄色| 久久一二三国产| 国产精品一区二区男女羞羞无遮挡| 国产精品你懂的在线| 亚洲二区视频| 香蕉精品999视频一区二区 | 亚洲精品综合久久中文字幕| 欧美一二三区精品| 欧美久久视频| 尤物yw午夜国产精品视频| 一区二区三区高清不卡| 男人的天堂成人在线| 狠狠色狠狠色综合系列| 亚洲一区综合| 欧美日韩一区二区在线视频| 国内免费精品永久在线视频| 亚洲激情成人在线| 牛牛国产精品| 黄色成人在线| 久久久久久综合| 国产精品丝袜白浆摸在线| 亚洲欧美国产77777| 欧美激情91| 亚洲精品一区二区三| 久久久蜜臀国产一区二区| 国产午夜精品全部视频在线播放 | 老**午夜毛片一区二区三区| 欧美午夜精品一区| 亚洲黄色av一区| 欧美日韩色婷婷| 亚洲精品一区二区网址| 久热精品视频在线观看一区| 国产午夜亚洲精品理论片色戒| 欧美一区二区三区在线播放| 国产精品国产自产拍高清av| 亚洲欧美日韩一区二区| 国产精品久久久一区麻豆最新章节| 亚洲天堂av高清| 国产精品免费网站| 久久久久国产精品厨房| 国产一区香蕉久久| 午夜精品久久久久久99热| 国产精品入口麻豆原神| 亚洲人成精品久久久久| 欧美视频官网| 一区二区欧美精品| 国产区精品视频| 久久久精品动漫| 99精品国产在热久久婷婷| 欧美日韩国内自拍| 久久成人18免费观看| 狠狠狠色丁香婷婷综合激情| 欧美激情网友自拍| 99伊人成综合| 狠狠色狠狠色综合| 欧美国产第一页| 欧美在线视频在线播放完整版免费观看 | 国产精品第一页第二页第三页| 一本色道久久综合狠狠躁篇怎么玩| 欧美私人啪啪vps| 欧美专区福利在线| 亚洲精品网址在线观看| 国产精品mm| 老鸭窝毛片一区二区三区| 亚洲精品国产拍免费91在线| 欧美日韩在线综合| 性8sex亚洲区入口| 欧美在线1区| 一本高清dvd不卡在线观看| 国产精品九九久久久久久久| 蜜桃视频一区| 中日韩男男gay无套| 亚洲成人在线视频网站| 欧美日韩一区二区三区在线观看免 | 亚洲一区三区电影在线观看| 国产精品毛片| 欧美激情精品久久久久久久变态| 亚洲小说欧美另类婷婷| 夜夜爽www精品| 国产精品国色综合久久| 欧美激情精品久久久久久免费印度 | 久久深夜福利免费观看| 99pao成人国产永久免费视频| 激情校园亚洲| 国产精品免费一区豆花| 欧美三级免费| 免费不卡中文字幕视频| 久久青青草综合| 亚洲在线视频| 亚洲一级在线观看| 91久久久亚洲精品| 亚洲欧洲综合| 伊人久久大香线蕉综合热线 | 亚洲欧洲综合另类| 国产一区二区三区久久久久久久久| 国产精品久久久久久久久借妻| 久久这里有精品视频| 久久久人成影片一区二区三区观看 | 国产精品h在线观看| 欧美三区在线观看| 欧美激情一区二区三区成人| 欧美精品成人一区二区在线观看| 久久精品日产第一区二区| 久久精品一区二区三区不卡牛牛| 亚洲欧美日韩一区二区三区在线观看| 中国女人久久久| 夜夜嗨av一区二区三区| 亚洲一区二区三区在线| 一本久久精品一区二区| 亚洲一区二区三区777| 国产精品99久久久久久久久久久久| 一本色道久久综合精品竹菊 | 亚洲国产欧美日韩精品| 亚洲精品一区二区三区不| 最新国产の精品合集bt伙计| 日韩一区二区精品葵司在线| 亚洲日本中文字幕| 亚洲一卡久久| 欧美一二三区在线观看| 久久综合九九| 美女精品国产| 国产精品国产三级国产普通话三级| 欧美日韩二区三区| 国产精品一二三四区| 国产精品久久久久久久久久久久| 国产欧美日韩一区二区三区| 国产精品入口日韩视频大尺度| 国产亚洲一区在线播放| 国产乱码精品1区2区3区| 狠狠色伊人亚洲综合网站色| 精久久久久久| 亚洲在线免费视频| 亚洲女同同性videoxma| 久久久久国产免费免费| 欧美日韩精品一区二区三区| 国产精品久久久久久久第一福利| 好吊成人免视频| 亚洲国产精品一区二区第四页av| 一区二区三区精品国产| 午夜久久资源| 欧美精品一区在线观看| 国产精品久久一级| 亚洲激情视频网站| 亚洲一区在线播放| 欧美成人激情视频| 欧美体内she精视频在线观看| 精品91视频| 99视频一区二区| 欧美不卡视频| 国产一区二区三区最好精华液| 最新亚洲电影| 久久嫩草精品久久久精品| 欧美视频一区二区在线观看 | 国产丝袜美腿一区二区三区| 亚洲第一页在线| 久久精品国产亚洲aⅴ| 欧美日韩国产精品成人| 在线播放精品| 欧美一级电影久久| 欧美色欧美亚洲高清在线视频| 国内精品久久久久影院薰衣草| 亚洲一区在线免费| 欧美成人免费网站| 激情欧美一区二区三区在线观看| 亚洲三级免费电影|