小明长大了,他决定去找找多年未见的两个好朋友小刚和小强。还记得当年大家一起组建了帮派,小刚能写文,小强能打架,三人在一起赛过诸葛亮。而如今大家天各一方,也不知道都混得怎么样。
小明这么多年社会上摸爬滚打深谙“天下熙熙,皆为利来。天下攘攘,皆为利往之理”,决定先聊聊探测一下这俩兄弟有没有钱。有钱和没钱处理方式当然不一样了。有钱了要多多交往,没钱就少来往。万一他生个病借我钱怎么办?
这段逻辑就用到了访问者模式,访问者小明根据小刚和小强类型不同执行了不同的方法。下来看看具体的代码。
首先是访问者的接口,访问者就两个方法一个针对的是穷人,另一个是富人
public interface IVisitor {
void visit(PoorMan poorMan);
void visit(RichMan richMan);
}
甭管穷人富人咱表面上至少是朋友嘛,既然是朋友来了肯定要接待拜访者嘛~有个朋友接口,里面就一个允许访问者访问的方法。
public interface IFriend {
void accept(IVisitor visitor);
}
穷人是朋友,有被访问的方法
public class PoorMan implements IFriend {
private String name;
public String getName() { return name; }
public PoorMan(String name) {
this.name = name;
}
public void accept(IVisitor visitor) {
visitor.visit(this);
}
}
富人也是朋友,也有被访问的方法。不过跟穷人的不一样
public class RichMan implements IFriend {
String name;
public String getName() { return name; }
public RichMan(String name) {
this.name = name;
}
public void accept(IVisitor visitor) {
visitor.visit(this);
}
}
最后看看场景
public class Client {
public static void main(String[] args) {
Visitor ming = new Visitor();//小明去访问朋友
PoorMan qiang = new PoorMan("小强");//有个穷人小强
qiang.accept(ming);
RichMan gang = new RichMan("小刚");//还有个符号小刚
gang.accept(ming);
}
}
运行结果:
小强这个人没钱以后一定要少交往
小刚这个哥们有钱问问他大腿缺挂坠不