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

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

java設計模式之Visitor

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

  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
精品久久久国产精品999| 日韩成人中文字幕在线观看| 成人a级免费视频| 久久777国产线看观看精品| 国产美女扒开尿口久久久| 欧美激情视频一区二区三区不卡| 亚洲欧美日韩国产中文| 国产成人精品av在线| 精品国产一区二区三区在线观看| 7777精品视频| 日本欧美国产在线| 亚洲精品中文字幕有码专区| 欧美影院成年免费版| 色播久久人人爽人人爽人人片视av| 国模私拍一区二区三区| 亚洲欧洲在线视频| 欧美日韩性视频在线| 伊人青青综合网站| 日本精品久久久久影院| 日韩理论片久久| 久久琪琪电影院| 欧美国产日韩在线| 欧美日韩成人在线视频| 欧美孕妇与黑人孕交| 欧美中文字幕第一页| 亚洲色图综合网| 91在线国产电影| 欧美一乱一性一交一视频| 韩国欧美亚洲国产| 日韩**中文字幕毛片| 久久久女女女女999久久| 亚洲色图五月天| 在线成人中文字幕| 啊v视频在线一区二区三区| 亚洲黄色av网站| 亚洲三级黄色在线观看| 亚洲精品国产免费| 亚洲黄色免费三级| 国产成人精品久久二区二区| 免费91麻豆精品国产自产在线观看| 亚洲精品国产精品国自产在线| 国产视频精品免费播放| 成人精品视频在线| 亚洲精品久久在线| 成人深夜直播免费观看| 91国产美女在线观看| 日韩欧美aⅴ综合网站发布| 国产一区香蕉久久| 久久6免费高清热精品| 日韩有码在线观看| 日韩在线视频观看正片免费网站| 亚洲女人被黑人巨大进入al| 久久国产精品视频| 国产精品一区久久久| 成人午夜激情免费视频| 久久久久久久久久久亚洲| 精品成人av一区| 最近2019中文字幕第三页视频| 欧美高清在线视频观看不卡| 国产精品国产亚洲伊人久久| 国产亚洲精品美女久久久久| 久久久久久久久久久久av| 亚洲美女福利视频网站| 97精品视频在线播放| 国产精品18久久久久久首页狼| 午夜精品一区二区三区在线播放| 国产精品精品视频| 亚洲精品美女久久久| 日韩av快播网址| 色偷偷av一区二区三区| 精品亚洲一区二区三区在线播放| 国产精彩精品视频| 成人av电影天堂| 欧美专区第一页| 欧美大胆a视频| xvideos国产精品| 亚洲欧美日韩在线一区| 欧美国产激情18| 日韩一区二区三区xxxx| 色与欲影视天天看综合网| 日韩av色在线| 国产美女久久久| 亚洲人成电影网站| 亚洲美女自拍视频| 久久综合色影院| 日韩福利在线播放| 日韩精品免费一线在线观看| 亚洲偷欧美偷国内偷| www.亚洲人.com| 亚洲精品99久久久久中文字幕| 国产一区欧美二区三区| 亲子乱一区二区三区电影| 久久男人av资源网站| 91精品国产综合久久久久久久久| 欧美另类交人妖| 欧美日韩成人在线观看| 九九久久久久久久久激情| 欧美精品videosex牲欧美| 欧美综合在线第二页| 91免费版网站入口| 欧美有码在线视频| 亚洲精品成人网| 不卡av在线网站| 国产美女91呻吟求| 国产精品综合久久久| 亚洲欧美视频在线| 国产精品aaaa| 日本一区二区不卡| 亚洲国语精品自产拍在线观看| 欧美wwwxxxx| 国内伊人久久久久久网站视频| 97精品在线观看| 精品久久久久久亚洲国产300| 91久久久国产精品| 中文字幕成人精品久久不卡| 色综合伊人色综合网站| 欧美成人一二三| 91国语精品自产拍在线观看性色| 在线看欧美日韩| 国产综合色香蕉精品| 亚洲va欧美va在线观看| 欧美黑人巨大精品一区二区| 国产69精品久久久久99| 97精品国产97久久久久久免费| 三级精品视频久久久久| 日韩美女免费视频| 国产不卡精品视男人的天堂| 国产精品成人va在线观看| 国产精品一二三在线| 在线播放国产精品| 欧美电影第一页| 亚洲福利在线观看| 亚洲免费一在线| 欧美极品美女电影一区| 欧美性受xxxx白人性爽| 亚洲美女性视频| 亚洲色图偷窥自拍| 国产成人在线亚洲欧美| 有码中文亚洲精品| 久久中文久久字幕| 亚洲精品午夜精品| 国产一区二区三区在线| 欧美精品videofree1080p| 欧美色播在线播放| 国产精品网站视频| 日韩av电影在线免费播放| 国内外成人免费激情在线视频| 欧美电影免费观看高清完整| 亚洲午夜未删减在线观看| 久久久久日韩精品久久久男男| 欧美日韩精品国产| …久久精品99久久香蕉国产| 久久成人综合视频| 国产视频在线一区二区| 中文字幕亚洲国产| 狠狠躁18三区二区一区| 久久久久久久久久国产精品| 亚洲男人7777| 国产精品青青在线观看爽香蕉| 精品久久久久久久久久ntr影视| 国产精品一区=区| 91久久精品一区| 日韩在线国产精品| 欧美黑人性视频|