一.案例引入
1.案例描述
2.传统方案的优缺点
二.访问者模式
1.基本介绍
2.访问者模式原理UML类图
原理类图的介绍说明
3.访问者模式解决上述问题的原理类图(仅供参考)
4.具体代码
Action
public abstract class Action {
public abstract void getManResult(Man man);
public abstract void getWomanResult(Woman woman);
}
Success
public class Success extends Action{
@Override
public void getManResult(Man man) {
System.out.println("男人给的评价是成功");
}
@Override
public void getWomanResult(Woman woman) {
System.out.println("女人给的评价是成功");
}
}
Fail
public class Fail extends Action{
@Override
public void getManResult(Man man) {
System.out.println("男人给的评价是失败");
}
@Override
public void getWomanResult(Woman woman ) {
System.out.println("女人给的评价是失败");
}
}
Person
public abstract class Person {
public abstract void accept(Action action);
}
Man
public class Man extends Person{
@Override
public void accept(Action action) {
action.getManResult(this);
}
}
Woman
public class Woman extends Person{
@Override
public void accept(Action action) {
action.getWomanResult(this);
}
}
ObjectStructure
public class ObjectStructure {
private List<Person> persons = new LinkedList<>();
public void attach(Person p){
persons.add(p);
}
public void detach(Person p){
persons.remove(p);
}
public void display(Action action){
for(Person p:persons){
p.accept(action);
}
}
}
Client
public class Client {
public static void main(String[] args) {
ObjectStructure objectStructure = new ObjectStructure();
objectStructure.attach(new Man());
objectStructure.attach(new Man());
Success success = new Success();
objectStructure.display(success);
Fail fail = new Fail();
objectStructure.display(fail);
}
}
5.双分派
6.访问者模式优缺点