zoukankan      html  css  js  c++  java
  • 访问者模式

    访问者模式的目的是封装一些施加于某种数据结构元素之上的操作,一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。

     

    访问者模式结构:


    抽象访问者角色:声明了一个或者多个访问操作,形成所有的具体元素角色必须实现的接口

    具体访问者角色:实现抽象访问者角色所声明的接口,也就是抽象访问者所声明的各个访问操作

    抽象节点角色:声明一个接受操作,接受一个访问者对象作为一个参量

    具体节点角色:实现了抽象元素所规定的接受操作

    结构对象角色:可以遍历结构中的所有元素,提供一个高层次的接口让访问者对象可以访问每一个元素,可以设计成一个符合对象或者一个聚集

     

     

    1. public interface Person {  
    2.       void accept(Visitor visitor);  
    3. }  
    4.   
    5.   
    6. public class Woman implements Person{  
    7.   
    8.     public void accept(Visitor visitor) {  
    9.           visitor.visit(this);  
    10.     }  
    11. }  
    12.   
    13.   
    14. public class Man implements Person{  
    15.   
    16.     public void accept(Visitor visitor) {  
    17.         visitor.visit(this);  
    18.     }  
    19. }  
    20. public interface Visitor {  
    21.       public void visit(Man man);  
    22.       public void visit(Woman girl);  
    23. }  
    24.   
    25. //成功时ManWoman的不同表现  
    26. public class Success implements Visitor{  
    27.   
    28.     public void visit(Man man) {  
    29.         System.out.println("当男人成功时,背后多半有一个伟大的女人");  
    30.     }  
    31.   
    32.   
    33.     public void visit(Woman woman) {  
    34.         System.out.println("当女人成功时,背后大多有一个不成功的男人");  
    35.     }  
    36. }  
    37.   
    38. //恋爱时ManWoman的不同表现  
    39. public class Love implements Visitor{  
    40.   
    41.     public void visit(Man man) {  
    42.         System.out.println("当男人恋爱时,凡事不懂也装懂");  
    43.     }  
    44.   
    45.   
    46.     public void visit(Woman girl) {  
    47.         System.out.println("当女人恋爱时,遇事懂也装不懂");  
    48.     }  
    49. }  

    ·  public class ObjectStructure {  

    ·      private List<Person> elements = new ArrayList<Person>();  

    ·    

    ·      public void attach(Person element){  

    ·          elements.add(element);  

    ·      }  

    ·        

    ·      public void detach(Person element){  

    ·          elements.remove(elements);  

    ·      }  

    ·        

    ·      //遍历各种具体元素并执行他们的accept方法  

    ·      public void display(Visitor visitor){  

    ·          for(Person p:elements){  

    ·              p.accept(visitor);  

    ·          }  

    ·      }  

    ·  }  

    ·    

    ·    

    ·  public class Client {  

    ·        public static void main(String[] args) {  

    ·          ObjectStructure o = new ObjectStructure();  //依赖于ObjectStructure  

    ·          //实例化具体元素  

    ·          o.attach(new Man());    

    ·          o.attach(new Woman());  

    ·            

    ·          //当成功时不同元素的不同反映  

    ·          Visitor success = new Success();           //依赖于抽象的Visitor接口  

    ·          o.display(success);  

    ·            

    ·          //当恋爱时的不同反映  

    ·          Visitor amativeness = new Love();          //依赖于抽象的Visitor接口  

    ·          o.display(amativeness);  

    ·            

    ·      }  

    ·  }  

  • 相关阅读:
    linux 、windows、mac、dns刷新
    Nginx日志切割及其各种服务日志随便切
    https是如何防劫持的
    梁启超-少年中国说
    mongodb-4.2-隋唐笔迹
    connection closed by foreign host
    磁盘类型查看
    魅力男神之解说
    jenkins 更新脚本之expect交互
    nginx 之特殊端口转目录访问
  • 原文地址:https://www.cnblogs.com/jinzhengquan/p/1935889.html
Copyright © 2011-2022 走看看