public abstract class Action {
public abstract void getManConclusion(Man man);
public abstract void getWomanConclusion(Woman woman);
}
public class Success extends Action {
@Override
public void getManConclusion(Man man) {
System.out.println(man.getClass().getSimpleName() + "-" + this.getClass().getSimpleName() + ",背后多半有一个伟大的女人");
}
@Override
public void getWomanConclusion(Woman woman) {
System.out.println(woman.getClass().getSimpleName() + "-" + this.getClass().getSimpleName() + ",背后多半有一个不成功的男人");
}
}
public class Fail extends Action {
@Override
public void getManConclusion(Man man) {
System.out.println(man.getClass().getSimpleName() + "-" + this.getClass().getSimpleName() + ",闷头喝酒");
}
@Override
public void getWomanConclusion(Woman woman) {
System.out.println(woman.getClass().getSimpleName() + "-" + this.getClass().getSimpleName() + ",眼泪汪汪");
}
}
public abstract class Person {
public abstract void accept(Action vistor);
}
public class Man extends Person {
@Override
public void accept(Action vistor) {
vistor.getManConclusion(this);
}
}
public class Woman extends Person {
@Override
public void accept(Action vistor) {
vistor.getWomanConclusion(this);
}
}
public class ObjectStructure {
private List<Person> elements = new ArrayList<>();
public void attach(Person element) {
elements.add(element);
}
public void detach(Person element) {
elements.remove(element);
}
public void display(Action vistor) {
for (Person e : elements) {
e.accept(vistor);
}
}
}
public class RunMain {
public static void main(String[] args) {
ObjectStructure o = new ObjectStructure();
o.attach(new Man());
o.attach(new Woman());
Success s = new Success();
o.display(s);
Fail f = new Fail();
o.display(f);
}
}