本文共 1468 字,大约阅读时间需要 4 分钟。
被访问者接口:
public interface ITarget { public void doSomeThing(); public void accept(IVisitor visitor);}
访问者接口:
public interface IVisitor { public void visit(ITarget target);}
被访问者:
public class TargetOne implements ITarget { @Override public void doSomeThing() { System.out.println("TargetOne do some thing."); } @Override public void accept(IVisitor visitor) { visitor.visit(this); }}public class TargetTwo implements ITarget { @Override public void doSomeThing() { System.out.println("TargetTwo do some thing."); } @Override public void accept(IVisitor visitor) { visitor.visit(this); }}
访问者:
public class Visitor implements IVisitor { @Override public void visit(ITarget target) { target.doSomeThing(); // 获得了ITarget的引用,可以在这里扩展ITarget接口类型的功能 System.out.println("Visitor.visit"); System.out.println("获得了ITarget的引用,可以在这里扩展ITarget接口类型的共用功能,而不必修改每一个ITarget接口实现类"); System.out.println("此处也可以用来获得 ITarget 下属的某个非公开资源,而只在当前的访问者方法中使用该非公开资源,从而保证资源的安全"); }}
使用者:
public class Consumer { public static void main(String[] args) { ITarget targetOne = new TargetOne(); ITarget targetTwo = new TargetTwo(); IVisitor visitor = new Visitor(); // visitor.visit(targetOne); // visitor.visit(targetTwo); targetOne.accept(visitor); targetTwo.accept(visitor); //两种使用方式,代表不同思路,从访问者出发以及从被访问者出发 }}
转载地址:http://ynbgx.baihongyu.com/