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

首頁 > 學院 > 開發設計 > 正文

Java模式設計之單例模式(四)

2019-11-18 13:50:38
字體:
來源:轉載
供稿:網友

  不完全的單例類

  什么是不完全的單例類

  估計有些讀者見過下面這樣的“不完全”的單例類。

  代碼清單10:“不完全”單例類

package com.javapatterns.singleton.demos;
public class LazySingleton
{
PRivate static LazySingleton
m_instance = null;
/**
* 公開的構造子,外界可以直接實例化
*/
public LazySingleton() { }
/**
* 靜態工廠方法
* @return 返還LazySingleton 類的惟一實例
*/
synchronized public static
LazySingleton getInstance()
{
if (m_instance == null)
{
m_instance = new LazySingleton();
}
return m_instance;
}
}
  上面的代碼乍看起來是一個“懶漢”式單例類,仔細一看,發現有一個公開的構造子。由于外界可以使用構造子創建出任意多個此類的實例,這違反了單例類只能有一個(或有限個)實例的特性,因此這個類不是完全的單例類。這種情況有時會出現,比如javax.swing.TimerQueue 便是一例,關于這個類,請參見《Java與模式》一書中的“觀察者模式與Swing 定時器” 一章。

  造成這種情況出現的原因有以下幾種可能:

 ?。?) 初學者的錯誤。許多初學者沒有熟悉到單例類的構造子不能是公開的,因此犯下這個錯誤。有些初學Java 語言的學員甚至不知道一個Java 類的構造子可以不是公開的。在 這種情況下,設計師可能會通過自我約束,也就是說不去調用構造子的辦法,將這個不完全的單例類在使用中作為一個單例類使用。

  在這種情況下,一個簡單的矯正辦法,就是將公開的構造子改為私有的構造子。

 ?。?) 當初出于考慮不周,將一個類設計成為單例類,后來發現此類應當有多于一個的實例。為了彌補錯誤, 干脆將構造子改為公開的,以便在需要多于一個的實例時, 可以隨時調用構造子創建新的實例。要糾正這種情況較為困難,必須根據具體情況做出改進的決定。假如一個類在最初被設計成為單例類,但后來發現實際上此類應當有有限多個實例,這時候應當考慮是否將單例類改為多例類(Multiton)。

 ?。?)設計師的Java 知識很好,而且也知道單例模式的正確使用方法,但是還是有意使用這種不完全的單例模式,因為他意在使用一種“改良”的單例模式。這時候, 除去共有的構造子不符合單例模式的要求之外,這個類必須是很好的單例模式。

  默認實例模式

  有些設計師將這種不完全的單例模式叫做“默認實例模式”(Default Instance Pattern)。在所謂的“ 默認實例模式”里面, 一個類提供靜態的方法,如同單例模式一樣, 同時又提供一個公開的構造子,如同普通的類一樣。

  這樣做的惟一好處是,這種模式答應客戶端選擇如何將類實例化:創建新的自己獨有的實例,或者使用共享的實例。這樣一來,由于沒有任何的強制性措施,客戶端的選擇不一定是合理的選擇。其結果是設計師往往不會花費時間在如何提供最好的選擇上,而是不恰當地將這種選擇交給客戶端的程序員,這樣必然會導致不理想的設計和欠考慮的實現。

  本文建議讀者不要這樣做。 相關模式

  有一些模式可以使用單例模式,如抽象工廠模式可以使用單例模式,將具體工廠類設計成單例類;建造模式可以使用單例模式,將具體建造類設計成單例類。

  多例(Multiton)模式

  正如同本章所說的,單例模式的精神可以推廣到多于一個實例的情況。這時候這種類叫做多例類,這種模式叫做多例模式。單例類(左)和多例類(右)的類圖如下所示。

Java模式設計之單例模式(四)(圖一)

  關于多例模式,請見《Java與模式》一書中的“專題:多例(Multiton)模式與多語言支持”一章。

  簡單工廠(Simple Factory)模式

  單例模式使用了簡單工廠模式(又稱為靜態工廠方法模式)來提供自己的實例。在上面ConfigManager 例子的代碼中, 靜態工廠方法getInstance() 就是靜態工廠方法。在java.awt.Toolkit 類中,getDefaultToolkit() 方法就是靜態工廠方法。簡單工廠模式的簡略類圖如下所示。

Java模式設計之單例模式(四)(圖二)

  本章討論了單例模式的結構和實現方法。

  單例模式是一個看上去很簡單的模式,很多設計師最先學會的往往是單例模式。然而,隨著Java 系統日益變得復雜化和分散化,單例模式的使用變得比過去困難。本書提醒讀者在分散式的Java 系統中使用單例模式時,盡量不要使用有狀態的。

  問答題

  1. 為什么不使用一個靜態的“全程”原始變量,而要建一個類?一個靜態的原始變量當然只能有一個值,自然而然不就是“單例”的嗎?

  2. 舉例說明如何調用EagerSingleton 類。

  3. 舉例說明如何調用RegSingleton 類和RegSingletonChild 類。

  4. 請問java.lang.Math 類和java.lang.StrictMath 類是否是單例模式?

  5. 我們公司只購買了一個JDBC 驅動軟件的單用戶使用許可,可否使用單例模式治理通過JDBC 驅動軟件連接的數據庫?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性生交xxxxxdddd| 57pao成人国产永久免费| 亚洲欧美激情四射在线日| 欧美性猛交xxxx免费看久久久| 久久久久北条麻妃免费看| 久久免费视频在线观看| 91情侣偷在线精品国产| 国产精品久久综合av爱欲tv| 午夜精品美女自拍福到在线| 最近中文字幕日韩精品| 亚洲精品久久久久久久久久久久| 欧美极品少妇xxxxx| 欧美成人亚洲成人| 国产精品亚发布| 综合久久五月天| 久久伊人91精品综合网站| 亚洲精品乱码久久久久久金桔影视| 日韩av三级在线观看| 欧美亚洲视频在线观看| 亚洲一区二区三区在线视频| 另类色图亚洲色图| 日韩hd视频在线观看| 色先锋久久影院av| 日韩精品极品在线观看| 亚洲最大av网| 亚洲综合中文字幕68页| 日韩精品在线私人| 亚洲在线视频观看| 日本成人精品在线| 久久久免费精品视频| 日韩免费在线看| 国产精品午夜一区二区欲梦| 亚洲电影中文字幕| 91久久精品国产| 欧美肥婆姓交大片| 久久夜精品va视频免费观看| 国产精品久久999| 超碰精品一区二区三区乱码| 九九热精品视频在线播放| 欧美大片免费看| 日韩视频在线免费观看| 欧美激情亚洲综合一区| 亚洲18私人小影院| 亚洲一区免费网站| 久久久电影免费观看完整版| 国产精品电影观看| 国内精品久久久| 日韩精品免费在线| 国产精品99久久久久久人| 欧美日韩另类视频| 欧美成人精品影院| 超碰日本道色综合久久综合| 精品久久久免费| 欧洲午夜精品久久久| 国产91热爆ts人妖在线| 欧美午夜精品久久久久久浪潮| 中文字幕欧美精品在线| 亚洲无限av看| 5566日本婷婷色中文字幕97| 欧美日韩福利视频| 国产第一区电影| 日韩欧美aⅴ综合网站发布| 国产v综合ⅴ日韩v欧美大片| 91精品国产自产在线观看永久| 欧美精品在线免费播放| 欧美日韩国产综合视频在线观看中文| 欧美激情图片区| 少妇高潮久久久久久潘金莲| 国内精久久久久久久久久人| 中文字幕免费精品一区高清| 国产精品久久久久免费a∨| 亚洲欧美视频在线| 亚洲激情在线观看视频免费| 国产精品一区二区三区久久久| 在线观看中文字幕亚洲| 国产美女高潮久久白浆| 久久久久久有精品国产| 久久精品国产欧美亚洲人人爽| 5252色成人免费视频| 久久伊人色综合| 欧美专区日韩视频| 色综合天天综合网国产成人网| 亚洲女成人图区| 国产综合视频在线观看| 亚洲色在线视频| 亚洲精品欧美日韩专区| 日韩美女视频中文字幕| 日本久久久久久| 欧美精品videosex牲欧美| 伊人久久综合97精品| 日韩亚洲在线观看| 久久久久久久久中文字幕| 日韩av在线一区二区| 欧美一级大片在线观看| 国产成人亚洲综合青青| 97人人模人人爽人人喊中文字| 国产精品扒开腿爽爽爽视频| 亚洲精品网站在线播放gif| 伊人男人综合视频网| 亚洲人成电影在线观看天堂色| 国产在线拍揄自揄视频不卡99| 亚洲人成在线观看| 日韩av片永久免费网站| 亚洲视频999| 久久精品99国产精品酒店日本| 国产精品h片在线播放| 国产精品视频不卡| 45www国产精品网站| 国产精品香蕉在线观看| 欧美高清激情视频| 国产欧美日韩中文字幕在线| 精品久久久久久亚洲国产300| 91wwwcom在线观看| 欧美国产亚洲视频| 亚洲伦理中文字幕| 中文字幕av一区中文字幕天堂| 成人疯狂猛交xxx| 91超碰caoporn97人人| 亚洲在线观看视频网站| 欧美小视频在线| 亚洲肉体裸体xxxx137| 精品久久久久久久久中文字幕| 欧美性猛交xxxx富婆| 亚洲精品国产拍免费91在线| 麻豆国产精品va在线观看不卡| 国产日韩在线观看av| 91久久久久久久久久久| 岛国av午夜精品| 一道本无吗dⅴd在线播放一区| www.99久久热国产日韩欧美.com| 精品久久久一区二区| 成人午夜高潮视频| 久久人91精品久久久久久不卡| 日韩精品一区二区三区第95| 亚洲欧美成人一区二区在线电影| 国产日本欧美在线观看| 国产精品久久久久久久7电影| 亚洲精品久久久久久久久久久久久| 亚洲精品国产精品国自产观看浪潮| 俺也去精品视频在线观看| 欧美日韩精品在线| 亚洲精品成人免费| 538国产精品一区二区在线| 一区二区三区国产视频| 亚洲欧洲中文天堂| 日韩av免费在线看| 欧美丝袜美女中出在线| 亚洲视频视频在线| 26uuu另类亚洲欧美日本老年| 亚洲女人被黑人巨大进入| 欧美国产日产韩国视频| 欧美人与性动交| 久久成人精品视频| 欧美福利视频在线| 国产精品夜色7777狼人| 一区二区三区高清国产| 欧美日本国产在线| 影音先锋日韩有码| 国产欧美日韩综合精品| 亚洲国产精品人人爽夜夜爽| 亚洲激情电影中文字幕| 亚洲日本中文字幕| 久久久久久这里只有精品| 九九热这里只有精品免费看|