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

    描述

    在访问者模式中,元素对象接受访问者对象的访问,而访问者对象处理元素对象上的操作。即至少在类方法上有相互包含的关系,互为成员变量。

    通俗解释一下:就是现在有一个家的主人,家里有很多东西,而他有个非常要好的朋友,现在这个主人就应该有个方法,这个方法是接待朋友进家门,而这个要好的朋友在朋友家里的时候,由于两人关系要好,所以权限很大,至少可以挪动家里的小物件,那么逻辑关系就来了。首先,主人要先有个接待这个朋友的方法,那么在这个成员方法中,这个朋友类是其中的参数。而这个朋友也应该个相应的成员方法--访问方法,这个方法的参数是这个主人类,通过这个主人类可以访问他们家里的东西。

    实例

    //主人类
    class TreeNode {
      private String name;
      private String email;
      public TreeNode(String name, String email) {
        this.name = name;
        this.email= email;
      }
      public String getName() {
        return name;
      }
      public String getEmail() {
        return email;
      }
      //主人定义的接待朋友的方法
      public void accept(NodeVisitor v) {
        v.visit(this);
      }
    }
    
    //朋友类接口,实现这个借口的都是朋友(因为主人会有很多关系等同的朋友)
    interface NodeVisitor {
      public void visit(TreeNode n);
    }
    //这个朋友实体想访问他的姓名
    class ConsoleVisitor implements NodeVisitor {
      @Override
      public void visit(TreeNode n) {
        System.out.println("console:" + n.getName());
      }
    }
    //这个朋友想访问他的邮箱地址
    class EmailVisitor implements NodeVisitor {
      @Override
      public void visit(TreeNode n) {
        System.out.println("email:" + n.getEmail());
      }
    }
    
    //主函数
    public class Main {
      public static void main(String[] args) {
    
        TreeNode computer = new TreeNode("w3cschool.cn", "w3school@w3.com");
        computer.accept(new ConsoleVisitor());
        computer.accept(new EmailVisitor());
      }
    }
    

      

    代码来源: 特别感谢 w3school java设计模式之访问者模式

  • 相关阅读:
    composer的使用
    tp5短信接口的使用
    PHP序列化与反序列化
    PHP 的oop思想
    php单例模式
    统计图的使用(chart)
    jq的时间插件
    php中Excel操作
    Linux 常用命令
    think cmfx目录结构
  • 原文地址:https://www.cnblogs.com/K-artorias/p/7976349.html
Copyright © 2011-2022 走看看