// 20210202
写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现访问者模式

/**
 * 访问者父类
 */
public abstract class Action {
    //得到男人的结论或反应
    public abstract void getManConclusion(Man man);
    //得到女人的结论或反应
    public abstract void getWomanConclusion(Women woman);
}
/**
 * 被访问者父类——人类
 */
public abstract class Person {
    //接受
    public abstract void accept(Action action);
}
/**
 * 关系承载者
 */
import java.util.LinkedList;
import java.util.List;
public class ObjectStructure {
    private List<Person> elements = new LinkedList<>();
    //增加
    public void attach(Person person){
        elements.add(person);
    }
    //移除
    public void detach(Person person){
        elements.remove(person);
    }
    //查看显示
    public void display(Action action) {
        for(Person person:elements) {
            person.accept(action);
        }
    }
}
/**
 * 访问者——失败类
 */
public class Failing extends Action{
    @Override
    public void getManConclusion(Man man) {
        System.out.println("男人失败...");
    }
    @Override
    public void getWomanConclusion(Women woman) {
        System.out.println("女人失败...");
    }
}
/**
 * 访问者——成功类
 */
public class Success extends Action{
    @Override
    public void getManConclusion(Man man) {
        System.out.println("男人成功...");
    }
    @Override
    public void getWomanConclusion(Women woman) {
        System.out.println("女人成功...");
    }
}
/**
 * 被访问者——男人
 */
public class Man extends Person{
    @Override
    public void accept(Action action) {
        action.getManConclusion(this);
    }
}
/**
 * 被访问者——女人
 */
public class Women extends Person{
    @Override
    public void accept(Action action) {
        action.getWomanConclusion(this);
    }
}
/**
 * 测试主类
 */
public class Main {
    public static void main(String[] args) {
        ObjectStructure objectStructure = new ObjectStructure();
        objectStructure.attach(new Man());
        objectStructure.attach(new Women());
        //成功
        Success success = new Success();
        objectStructure.display(success);
        Failing failing = new Failing();
        objectStructure.display(failing);
    }
}

以上
希望对大家有所帮助
原文:https://www.cnblogs.com/lavender-pansy/p/14361320.html