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设计模式之访问者模式

  • 相关阅读:
    ORA-12520: TNS:监听程序无法为请求的服务器类型找到可用的处理程序解
    Django2.1.2创建默认管理后台
    堡垒机实例以及数据库操作
    pycharm常用快捷键
    Linux命令之sftp
    oracle收集ash和awr性能报告方法
    linux-php5.6-安装sftp扩展
    linux系统安全设置策略
    Openssh版本升级修复漏洞
    Android Studio下HierarchyViewer的使用
  • 原文地址:https://www.cnblogs.com/K-artorias/p/7976349.html
Copyright © 2011-2022 走看看