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

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

在Java中應用設計模式之Singleton

2019-11-18 12:15:31
字體:
來源:轉載
供稿:網友

  基本概念
  
  ingleton 是一種創建性模型,它用來確保只產生一個實例,并提供一個訪問它的全局訪問點。對一些類來說,保證只有一個實例是很重要的,比如有的時候,數據庫連接或 Socket 連接要受到一定的限制,必須保持同一時間只能有一個連接的存在。
  
  再舉個例子,集合中的 set 中不能包含重復的元素,添加到set里的對象必須是唯一的,假如重復的值添加到 set,它只接受一個實例。JDK中正式運用了Singleton模式來實現 set 的這一特性,大家可以查看java.util.Collections里的內部靜態類SingletonSet的原代碼。其實Singleton是最簡單但也是應用最廣泛的模式之一,在 JDK 中隨處可見。
  
  簡單分析
  
  為了實現 Singleton 模式,我們需要的是一個靜態的變量,能夠在不創建對象的情況下記憶是否已經產生過實例了。靜態變量或靜態方法都可以在不產生具體實例的情況下直接調用,這樣的變量或方法不會因為類的實例化而有所改變。
  
  在圖1的結構中可以看到,uniqueInstance 就是這個獨立的靜態變量,它可以記憶對象是否已經實例化了,在靜態方法 Instance 中對這個變量進行判定,若沒有實例化過就產生一個新的對象,假如已經實例化了則不再產生新的對象,仍然返回以前產生的實例。
  
在Java中應用設計模式之Singleton

  
圖1: Singleton 模式結構

  
  具體實施
  
  實現 Singleton 模式的辦法通常有三種。
  
  一、用靜態方法實現 Singleton
  
  這種方法是使用靜態方法來監視實例的創建。為了防止創建一個以上的實例,我們最好把構造器聲明為 PRivate。
  
  這樣可以防止客戶程序員通過除由我們提供的方法之外的任意方式來創建一個實例,假如不把構造器聲明為private,編譯器就會自作聰明的自動同步一個默認的friendly構造器。這種實現方法是最常見的,也就是圖1中結構的標準實現。
  
  
  public class Singleton
  {
  private static Singleton s;
  private Singleton()
  {
  };
  /**
  * Class method to access
  the singleton instance of the class。
  */
  public static Singleton getInstance()
  {
  if (s == null)
  s = new Singleton();
  return s;
  }
  }
  // 測試類
  class singletonTest
  {
  public static void main(String[] args)
  {
  Singleton s1 = Singleton.getInstance();
  Singleton s2 = Singleton.getInstance();
  if (s1==s2)
  System.out.println
  ("s1 is the same instance with s2");
  else
  System.out.println
  ("s1 is not the same instance with s2");
  }
  }
  
  singletonTest運行結果是:
  
  s1 is the same instance with s2
  
  這證實我們只創建了一個實例.
  
  二、以靜態變量為標志實現 Singleton
  
  在類中嵌入一個靜態變量做為標志,每次都在進入構造器的時候進行檢查。
  
  問題在于構造器沒有返回類型,假如確定創建一個實例成功與否。一個方法是調用一個函數來檢查創建是否成功,然后簡單的返回一個來自靜態變量的值,但是這樣做是不優雅的,而且輕易發生錯誤。比較好的做法是創建一個當創建了一個以上的實例時可以拋出異常的類,這個類僅僅是調用父類方法,好處是用了自己命名的異常類型,錯誤信息更加清楚:
  
  class SingletonException extends RuntimeException
  {
  public SingletonException(String s)
  {
  super(s);
  }
  }
  
  class Singleton
  {
  static boolean instance_flag = false;
  // true if 1 instance
  public Singleton()
  {
  if (instance_flag)
  throw new SingletonException
  ("Only one instance allowed");
  else
  instance_flag = true;
  // set flag for 1 instance
  }
  }
  
  // 測試類
  
  public class singletonTest
  {
  static public void main(String argv[])
  {
  Singleton s1, s2;
  // create one
  incetance--this should always work
  System。out.println
  ("Creating one instance");
  try {
  s1 = new Singleton();
  } catch (SingletonException e)
  {
  System.out.println(e.getMessage());
  }
  // try to create another
  spooler --should fail
  System.out.println
  ("Creating two instance");
  try {
  s2 = new Singleton();
  } catch (SingletonException e)
  {
  System.out.println(e.getMessage());
  }
  }
  }
  
  singletonTest運行結果是:
  
  Creating one instance
  Creating two instance
  Only one instance allowed
  
  可以看出,第一個實例順利創建,第二個實例創建實拋出了我們自定義的異常。
  
  三、用注冊器機制來創建 Singleton
  
  首先用集合中的Hashtable 和Enumeration來實現addItem(Object key, Object value),getItem(Object key),removeItem(Object key)等方法實現一個治理器,將key和value一一關聯起來,客戶程序員創建實例前首先用addItem方法進行注冊,再用getItem方法獲取實例。
  
  Hashtable中的key是唯一的,從而保證創建的實例是唯一的,具體實現限于篇幅不再細說,在Prototype模型的應用一文中我將會給出一個實現注冊器的代碼。用注冊器機制來創建 Singleton模式的好處是易于治理,可以同時控制多個不同類型的Singleton 實例。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产99在线|中文| 欧美性高跟鞋xxxxhd| 日韩av中文字幕在线播放| 日韩欧美在线中文字幕| 亚洲精品国偷自产在线99热| 国产精品美女久久| 久久精品国产欧美激情| 亚洲免费一级电影| 亚洲国产精彩中文乱码av在线播放| 九九热精品视频在线播放| 亚洲男人av电影| 亚洲国产欧美一区二区三区久久| 欧美乱妇40p| 国产精品观看在线亚洲人成网| 久久精品人人做人人爽| 亚洲经典中文字幕| 国产精品久久久久久久午夜| 国产成人福利夜色影视| 91国偷自产一区二区三区的观看方式| 日韩免费av片在线观看| 国内精品久久久久久中文字幕| 精品久久久久久久久久国产| 国产精品一区二区性色av| 国产一区二区三区网站| 精品国产精品三级精品av网址| 亚洲成成品网站| 91久久精品国产91性色| 精品国产一区二区三区久久狼5月| 日本一区二区三区四区视频| 日本精品在线视频| 亚洲直播在线一区| 成人激情春色网| 久久乐国产精品| 国产精品偷伦视频免费观看国产| 欧美激情一区二区三区在线视频观看| 亚洲视频在线免费观看| 日韩一区av在线| 亚洲第一二三四五区| 色综合五月天导航| 欧美激情精品久久久久久久变态| 亚洲精品免费一区二区三区| 日产日韩在线亚洲欧美| 亚洲国产一区二区三区在线观看| 国产亚洲aⅴaaaaaa毛片| 欧美一级高清免费播放| 黄色一区二区在线| 国产一区私人高清影院| 欧美日韩国产激情| 色偷偷av亚洲男人的天堂| 亚洲欧洲成视频免费观看| 亚洲一区中文字幕在线观看| 日韩国产欧美精品在线| 欧美性猛交丰臀xxxxx网站| 久久亚洲综合国产精品99麻豆精品福利| 亚洲一区二区免费在线| 亚洲精品v天堂中文字幕| 国产午夜精品久久久| 久久久久国产精品一区| 亚洲三级 欧美三级| 欧美自拍视频在线| 色综合久久悠悠| 亚洲性生活视频| 久久中文字幕视频| 91精品国产91久久久久久不卡| 日韩一区二区精品视频| 久久久久国产一区二区三区| 成人免费视频网| 欧美成人网在线| 97精品一区二区三区| 色七七影院综合| 亚洲精品电影在线观看| 久久国产精品久久精品| 欧美黑人巨大精品一区二区| 欧美床上激情在线观看| 亚洲二区中文字幕| 日韩欧美在线免费| 另类专区欧美制服同性| 欧美第一黄色网| 久久综合久久88| 黄网站色欧美视频| 亚洲欧美国产一区二区三区| 精品久久久av| 亚洲国产成人爱av在线播放| 日本老师69xxx| 91精品啪在线观看麻豆免费| 亚洲欧美中文日韩v在线观看| 日本精品视频在线观看| 欧洲日本亚洲国产区| 欧美国产日本高清在线| 欧美精品videosex牲欧美| 91久久精品国产91久久| 国产精品成久久久久三级| 亚洲黄色免费三级| 91精品视频一区| 久久久精品在线观看| 久久久久免费精品国产| 国产精品露脸av在线| 国产亚洲欧美另类中文| 国产一区二区香蕉| 91国内产香蕉| 欧日韩不卡在线视频| 青草青草久热精品视频在线观看| 久久精品成人欧美大片古装| 国产一区二区美女视频| 精品久久久精品| 国产精品私拍pans大尺度在线| 欧美天堂在线观看| 久久中文字幕视频| 亚洲国产美女久久久久| 日韩欧美在线中文字幕| 亚洲国产成人精品久久久国产成人一区| 亚洲欧美综合v| 日韩欧美aaa| 欧美自拍大量在线观看| 国产视频久久久久久久| 久久精品视频亚洲| 亚洲色图欧美制服丝袜另类第一页| 国产精品一区二区三区在线播放| 亚洲欧美精品在线| 亚洲精品wwww| 正在播放亚洲1区| 欧美性猛交xxxx免费看漫画| 97超碰国产精品女人人人爽| 日本不卡视频在线播放| 日韩国产中文字幕| 欧美巨猛xxxx猛交黑人97人| 久久精品国产96久久久香蕉| 另类美女黄大片| 激情成人在线视频| 日韩美女av在线免费观看| 国产一区在线播放| 狠狠色狠狠色综合日日小说| 欧美日韩另类在线| 国产精品美女免费| 欧洲美女免费图片一区| 欧美精品激情在线| 中文字幕精品久久| 亚洲人成免费电影| 亚洲国产欧美久久| 精品一区二区三区三区| 欧美午夜激情在线| 国产亚洲精品一区二555| 国产欧美在线播放| 精品视频中文字幕| 亚洲最大成人在线| 中文国产成人精品| 午夜精品一区二区三区视频免费看| 日韩精品免费视频| 国产精品视频永久免费播放| 久久久久北条麻妃免费看| 欧美精品免费播放| 日韩精品极品视频免费观看| 亚洲国产欧美一区| 国产精品久久久久久av| 亚洲欧美日韩国产成人| 日本一欧美一欧美一亚洲视频| 亚洲欧美国产va在线影院| 在线精品视频视频中文字幕| 日韩精品日韩在线观看| 欧美在线亚洲一区| 亚洲欧美日韩第一区| 国内精品久久久久久久久| 国产精品夜色7777狼人| 欧美极品少妇全裸体|