// 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