<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Visitor模式定義:
    表示一個作用于某對象結(jié)構(gòu)中各元素的操作。它可以使你不修改各元素類的前提下定義作用于這些元素的新操作,也就是動態(tài)的增加新的方法。
    Visitor模式結(jié)構(gòu)圖:
     
    Visitor模式中主要角色:
    1) 訪問者角色(Visitor):為該對象結(jié)構(gòu)(ObjectStructure)中的具體元素提供一個訪問操作接口。該操作接口的名字和參數(shù)標識了要訪問的具體元素角色。這樣訪問者就可以通過該元素角色的特定接口直接訪問它。
    2) 具體訪問者角色(ConcreteVisitor):實現(xiàn)Vistor接口的操作。
    3)元素角色(Element):該接口定義一個accept操作接受具體的訪問者。
    4) 具體元素角色(ConcreteElement):實現(xiàn)Element的accept操作。
    5) 對象結(jié)構(gòu)角色(ObjectStructure):這是使用訪問者模式必備的角色。它要具備以下特征:能枚舉它的元素;可以提供一個高層的接口以允許該訪問者訪問它的元素;可以是一個復(fù)合(組合模式)或是一個集合,如一個列表或一個無序集合。
    Visitor模式的一個例子
    由于本人閱歷不足,實在想不出好的例子,這個例子基本是按結(jié)構(gòu)圖所寫,不過已經(jīng)加上了注釋。
    import java.util.ArrayList;
    import java.util.Collection;

    interface Visitor{
     public void visitElementA(ConcreteElementA elementA);//針對具體元素A的新方法
     public void visitElementB(ConcreteElementB elementB);//針對具體元素B的新方法
    }
    interface Element{
     public void accept(Visitor visitor);
    }
    class ConcreteVisitor implements Visitor{//具體的訪問者

     public void visitElementA(ConcreteElementA elementA) {
      System.out.println(elementA.getName()+" visited by ConcreteVisitor ");
      
     }
     public void visitElementB(ConcreteElementB elementB) {
      System.out.println(elementB.getName()+" visited by ConcreteVisitor ");
      
     }
    }
    class ConcreteElementA implements Element{//具體元素A
     private String name;
     public ConcreteElementA(String name){
      this.name=name;
     }
      
     public void accept(Visitor visitor) {//接受訪問者調(diào)用它針對該元素的新方法
      visitor.visitElementA(this);
      
     }
     public String getName() {
      return name;
     }
     
     
    }
    class ConcreteElementB implements Element{//具體元素B
     private String name;
     public ConcreteElementB(String name){
      this.name=name;
     }
     public String getName() {
      return name;
     }
     public void accept(Visitor visitor) {//接受訪問者調(diào)用它針對該元素的新方法
      visitor.visitElementB(this);
      
     }
     
    }
    class ObjectStructure{//對象結(jié)構(gòu)即元素的集合
     private Collection<Element> collection=new ArrayList<Element>();
     public void attach(Element element){
      collection.add(element);
     }
     public void detach(Element element){
      collection.remove(element);
     }
     public void accept(Visitor visitor )
       {
         for(Element element:collection){
          element.accept(visitor);
         }
       }

    }
    public class Client {
     public static void main(String args[]){
      Element elementA=new ConcreteElementA("ElementA");
      Element elementB=new ConcreteElementB("ElementB");
      Visitor visitor=new ConcreteVisitor();
      
      ObjectStructure os=new ObjectStructure();
      os.attach(elementA);
      os.attach(elementB);
      os.accept(visitor);
      
      }
     
    }
    Visitor模式優(yōu)缺點:
    1) 優(yōu)點:不用修改具體的元素類,就可以增加新的操作。主要是通過元素類的accept方法來接受一個visitor對象來實現(xiàn)的。
    2) 缺點:不易頻繁增加元素類,沒增加一個元素類,就要在Visitor接口中寫一個針對該元素的方法,而且還要修改Visitor的子類。

     

    posts - 146, comments - 143, trackbacks - 0, articles - 0

    Copyright © flustar

    主站蜘蛛池模板: 无人影院手机版在线观看免费| 中文字幕无码日韩专区免费| 国产精品免费观看| 亚洲AV无码AV男人的天堂| 看全免费的一级毛片| 国产精品免费综合一区视频| 亚洲日本中文字幕天天更新| 在线播放高清国语自产拍免费 | 免费无码精品黄AV电影| 亚洲综合激情视频| 18以下岁毛片在免费播放| 中文字幕亚洲精品| av无码免费一区二区三区| 亚洲精品国产日韩| 永久免费av无码网站大全| 亚洲av永久无码天堂网| 国产裸模视频免费区无码| 日本一区二区在线免费观看 | 69视频免费观看l| 亚洲国产成人精品无码一区二区 | 高潮内射免费看片| 亚洲成人免费网站| 免费H网站在线观看的| 亚洲色大18成人网站WWW在线播放| 日本不卡视频免费| 一级毛片免费全部播放| 亚洲韩国精品无码一区二区三区| 国产精品99精品久久免费| 亚洲欧洲国产综合| 免费黄网在线观看| 国产福利在线观看永久免费| 亚洲毛片在线观看| 真实乱视频国产免费观看| fc2免费人成在线| 亚洲国产超清无码专区| 国产一级高清视频免费看| aaa毛片视频免费观看| 亚洲国产日韩在线| 亚洲国产午夜福利在线播放| 91精品免费观看| 国产亚洲视频在线观看|