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

首頁 > 編程 > Java > 正文

Java設計模式之訪問模式(Visitor者模式)介紹

2019-11-26 15:17:08
字體:
來源:轉載
供稿:網友

Visitor定義:作用于某個對象群中各個對象的操作。它可以使你在不改變這些對象本身的情況下,定義作用于這些對象的新操作。

在Java中,Visitor模式實際上是分離了collection結構中的元素和對這些元素進行操作的行為。

為何使用Visitor模式
Java的Collection(包括Vector和Hashtable)是我們最經常使用的技術,可是Collection好象是個黑色大染缸,本來有各種鮮明類型特征的對象一旦放入后,再取出時,這些類型就消失了。那么我們勢必要用If來判斷,如:

復制代碼 代碼如下:

Iterator iterator = collection.iterator()
while (iterator.hasNext()) {
   Object o = iterator.next();
   if (o instanceof Collection)
      messyPrintCollection((Collection)o);
   else if (o instanceof String)
      System.out.println("'"+o.toString()+"'");
   else if (o instanceof Float)
      System.out.println(o.toString()+"f");
   else
      System.out.println(o.toString());
}

在上例中,我們使用了 instanceof來判斷 o的類型。

很顯然,這樣做的缺點代碼If else if 很繁瑣,我們就可以使用Visitor模式解決它。

如何使用Visitor模式

針對上例,我們設計一個接口visitor訪問者:

復制代碼 代碼如下:

public interface Visitor
{
   public void visitCollection(Collection collection);
   public void visitString(String string);
   public void visitFloat(Float float);
}

在這個接口中,將我們認為Collection有可能的類的類型放入其中。

有了訪問者,我們需要被訪問者,被訪問者就是我們Collection的每個元素Element,我們要為這些Element定義一個可以接受訪問的接口(訪問和被訪問是互動的,只有訪問者,被訪問者如果表示不歡迎,訪問者就不能訪問)。

我們定義這個接口叫Visitable,用來定義一個Accept操作,也就是說讓Collection每個元素具備可訪問性。

復制代碼 代碼如下:

public interface Visitable{
   public void accept(Visitor visitor);
}

好了,有了兩個接口,我們就要定義他們的具體實現(Concrete class):
復制代碼 代碼如下:

public class ConcreteElement implements Visitable
{
   private String value;
   public ConcreteElement(String string) {
      value = string;
   }
   //定義accept的具體內容 這里是很簡單的一句調用
   public void accept(Visitor visitor) {
      visitor.visitString(this);
   }
}

再看看訪問者的Concrete實現:

復制代碼 代碼如下:

public class ConcreteVisitor implements Visitor
{
   //在本方法中,我們實現了對Collection的元素的成功訪問
   public void visitCollection(Collection collection) {
      Iterator iterator = collection.iterator()
      while (iterator.hasNext()) {
         Object o = iterator.next();
         if (o instanceof Visitable)
            ((Visitable)o).accept(this);
      }

   public void visitString(String string) {
      System.out.println("'"+string+"'");
   }

   public void visitFloat(Float float) {
      System.out.println(float.toString()+"f");
   }
}

在上面的visitCollection我們實現了對Collection每個元素訪問,只使用了一個判斷語句,只要判斷其是否可以訪問。

至此,我們完成了Visitor模式基本架構。

使用Visitor模式的前提

對象群結構中(Collection) 中的對象類型很少改變,也就是說訪問者的身份類型很少改變,如上面中Visitor中的類型很少改變,如果需要增加新的操作,比如上例中我們在ConcreteElement具體實現外,還需要新的ConcreteElement2 ConcreteElement3。

可見使用Visitor模式是有前提的,在兩個接口Visitor和Visitable中,確保Visitor很少變化,變化的是Visitable,這樣使用Visitor最方便。

如果Visitor也經常變化,也就是說,對象群中的對象類型經常改變,一般建議是,不如在這些對象類中逐個定義操作,但是Java的Reflect技術解決了這個問題。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲图片欧美日产| 日韩中文字幕不卡视频| 国产精品日日做人人爱| 亚洲黄在线观看| 国产精品美女视频网站| 91精品在线观| 亚洲精品wwwww| 成人免费直播live| 91人人爽人人爽人人精88v| 国产精品xxx视频| 国产成人精品免高潮费视频| 日本欧美在线视频| 日韩中文字幕久久| 久久久精品999| 日韩欧美极品在线观看| 日本人成精品视频在线| 国产在线高清精品| 久久精品99久久久久久久久| 在线观看精品国产视频| 国产精品你懂得| 亚洲欧美中文字幕在线一区| 久久国产精品视频| 最近更新的2019中文字幕| 日韩激情av在线播放| 久久久99久久精品女同性| 久久91超碰青草是什么| 亚洲国产91精品在线观看| 亚洲色图25p| 色哟哟网站入口亚洲精品| 亚洲成人激情在线观看| 久久精品夜夜夜夜夜久久| 国产精品成av人在线视午夜片| 国产成人免费av电影| 日本精品久久中文字幕佐佐木| 国产一区二区在线免费视频| 久久久噜久噜久久综合| 亚洲一区二区三区乱码aⅴ| 久久久91精品| 亚洲美女免费精品视频在线观看| 欧美大秀在线观看| 日韩大片免费观看视频播放| 高清欧美性猛交| 91在线精品播放| 欧美亚洲激情视频| 国产一区二区三区四区福利| 亚洲www永久成人夜色| 午夜精品久久久久久99热软件| 国产亚洲精品美女久久久久| 国产综合福利在线| 欧美激情视频免费观看| 亚洲欧美中文日韩v在线观看| 亚洲精品视频二区| 欧美综合国产精品久久丁香| 最好看的2019年中文视频| 国产欧美最新羞羞视频在线观看| 国内精品免费午夜毛片| 欧美一级大片视频| 欧美极品美女视频网站在线观看免费| 在线播放精品一区二区三区| 久久视频在线视频| 国产成人亚洲精品| 在线播放日韩欧美| 日本欧美一级片| 国产日韩在线精品av| 热久久免费视频精品| 国产精品成人一区| 久久99国产综合精品女同| 日韩a**站在线观看| 亚洲欧美日韩精品久久奇米色影视| 久久久久成人精品| 91在线精品视频| 亚洲天堂一区二区三区| 欧美亚洲视频在线看网址| 亚洲2020天天堂在线观看| 亚洲女同性videos| 国产精品www色诱视频| 国模精品视频一区二区| 国产一区视频在线播放| 日本欧美爱爱爱| 伊是香蕉大人久久| 久久精品国产96久久久香蕉| 亚洲精品在线看| 亚洲成人1234| 欧美日本中文字幕| 欧美做受高潮电影o| 欧美日韩在线免费| 日韩中文字在线| 欧美激情啊啊啊| 亚洲欧美成人在线| 91香蕉亚洲精品| 操人视频在线观看欧美| 成人精品aaaa网站| 亚洲国产欧美日韩精品| 91在线国产电影| 色琪琪综合男人的天堂aⅴ视频| 国产这里只有精品| 亚洲剧情一区二区| 欧美国产第二页| 欧美久久精品一级黑人c片| 在线观看中文字幕亚洲| 亚洲欧美综合区自拍另类| 操人视频在线观看欧美| 中日韩午夜理伦电影免费| 欧美高清在线播放| 亚洲电影中文字幕| 岛国av午夜精品| 久久久久99精品久久久久| 国产成人精品久久亚洲高清不卡| 久久亚洲影音av资源网| 日韩高清欧美高清| 亚洲春色另类小说| 国模叶桐国产精品一区| 91亚洲va在线va天堂va国| 国产成人一区二区三区| 亚洲国产精品成人精品| 精品久久久久久久久国产字幕| 一本色道久久综合狠狠躁篇怎么玩| 91网在线免费观看| 久久91亚洲精品中文字幕| 成人国产在线激情| 久久精品视频在线播放| 91久久久久久久久久久久久| 97在线观看视频| 成人黄色网免费| 欧美亚洲视频在线观看| 国产成+人+综合+亚洲欧美丁香花| 久久久久久久久久久av| 中国china体内裑精亚洲片| 精品亚洲一区二区三区四区五区| 日韩高清有码在线| 欧美肥臀大乳一区二区免费视频| 秋霞av国产精品一区| 91爱视频在线| 精品国产一区二区三区久久久狼| 国产成人在线一区| 精品久久久久久中文字幕大豆网| 亚洲自拍另类欧美丝袜| 7777精品视频| 国产大片精品免费永久看nba| 亚洲欧美在线磁力| 国产成人精品一区| 国产欧美一区二区三区久久| 国产精品高清网站| 2019中文在线观看| 精品国产一区二区三区久久狼黑人| 97碰在线观看| 国产精品99蜜臀久久不卡二区| 国产精品av电影| 欧美成人免费视频| 91精品国产综合久久香蕉最新版| 久久精品国产一区| 免费91在线视频| 国内成人精品一区| 92裸体在线视频网站| 91欧美精品午夜性色福利在线| 欧美性极品少妇精品网站| 97涩涩爰在线观看亚洲| 欧美日韩免费看| 国外日韩电影在线观看| 日韩av成人在线观看| 亚洲一区二区免费在线| xxxx欧美18另类的高清| 亚洲国内高清视频| 欧美大片欧美激情性色a∨久久|