ITPub博客

首页 > 应用开发 > Java > 访问者模式

访问者模式

Java 作者:壹頁書 时间:2017-03-24 11:22:02 0 删除 编辑
http://blog.csdn.net/chenssy/article/details/12029633
https://wizardforcel.gitbooks.io/design-pattern-lessons/content/lesson28.html
http://www.cnblogs.com/java-my-life/archive/2012/06/14/2545381.html




这个模式好难啊,似乎也没有什么应用的场景.

先记录一下吧。

  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3.   
  4. public class Test {  
  5.     public static void main(String[] args) {  
  6.         // 创建一个结构对象  
  7.         ObjectStructure os = new ObjectStructure();  
  8.         // 给结构增加一个节点  
  9.         os.add(new NodeA());  
  10.         // 给结构增加一个节点  
  11.         os.add(new NodeB());  
  12.         // 创建一个访问者  
  13.         Visitor visitor = new VisitorA();  
  14.         os.action(visitor);  
  15.     }  
  16. }  
  17.   
  18. interface Visitor {  
  19.     /** 
  20.      * 对应于NodeA的访问操作 
  21.      */  
  22.     public void visit(NodeA node);  
  23.   
  24.     /** 
  25.      * 对应于NodeB的访问操作 
  26.      */  
  27.     public void visit(NodeB node);  
  28. }  
  29.   
  30. class VisitorA implements Visitor {  
  31.     /** 
  32.      * 对应于NodeA的访问操作 
  33.      */  
  34.     @Override  
  35.     public void visit(NodeA node) {  
  36.         System.out.println(node.operationA());  
  37.     }  
  38.   
  39.     /** 
  40.      * 对应于NodeB的访问操作 
  41.      */  
  42.     @Override  
  43.     public void visit(NodeB node) {  
  44.         System.out.println(node.operationB());  
  45.     }  
  46.   
  47. }  
  48.   
  49. class VisitorB implements Visitor {  
  50.     /** 
  51.      * 对应于NodeA的访问操作 
  52.      */  
  53.     @Override  
  54.     public void visit(NodeA node) {  
  55.         System.out.println(node.operationA());  
  56.     }  
  57.   
  58.     /** 
  59.      * 对应于NodeB的访问操作 
  60.      */  
  61.     @Override  
  62.     public void visit(NodeB node) {  
  63.         System.out.println(node.operationB());  
  64.     }  
  65.   
  66. }  
  67.   
  68. abstract class Node {  
  69.     /** 
  70.      * 接受操作 
  71.      */  
  72.     public abstract void accept(Visitor visitor);  
  73. }  
  74.   
  75. class NodeA extends Node {  
  76.     /** 
  77.      * 接受操作 
  78.      */  
  79.     @Override  
  80.     public void accept(Visitor visitor) {  
  81.         visitor.visit(this);  
  82.     }  
  83.   
  84.     /** 
  85.      * NodeA特有的方法 
  86.      */  
  87.     public String operationA() {  
  88.         return "NodeA";  
  89.     }  
  90.   
  91. }  
  92.   
  93. class NodeB extends Node {  
  94.     /** 
  95.      * 接受方法 
  96.      */  
  97.     @Override  
  98.     public void accept(Visitor visitor) {  
  99.         visitor.visit(this);  
  100.     }  
  101.   
  102.     /** 
  103.      * NodeB特有的方法 
  104.      */  
  105.     public String operationB() {  
  106.         return "NodeB";  
  107.     }  
  108. }  
  109.   
  110. class ObjectStructure {  
  111.   
  112.     private List<Node> nodes = new ArrayList<Node>();  
  113.   
  114.     /** 
  115.      * 执行方法操作 
  116.      */  
  117.     public void action(Visitor visitor) {  
  118.   
  119.         for (Node node : nodes) {  
  120.             node.accept(visitor);  
  121.         }  
  122.   
  123.     }  
  124.   
  125.     /** 
  126.      * 添加一个新元素 
  127.      */  
  128.     public void add(Node node) {  
  129.         nodes.add(node);  
  130.     }  
  131. } 




来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-2135993/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 备忘录模式
请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    620
  • 访问量
    6339945