访问者模式
描述
在访问者模式中,元素对象接受访问者对象的访问,而访问者对象处理元素对象上的操作。即至少在类方法上有相互包含的关系,互为成员变量。
通俗解释一下:就是现在有一个家的主人,家里有很多东西,而他有个非常要好的朋友,现在这个主人就应该有个方法,这个方法是接待朋友进家门,而这个要好的朋友在朋友家里的时候,由于两人关系要好,所以权限很大,至少可以挪动家里的小物件,那么逻辑关系就来了。首先,主人要先有个接待这个朋友的方法,那么在这个成员方法中,这个朋友类是其中的参数。而这个朋友也应该个相应的成员方法--访问方法,这个方法的参数是这个主人类,通过这个主人类可以访问他们家里的东西。
实例
//主人类 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设计模式之访问者模式