**
* @author zlc
* @created 2017/12/24
* 状态的抽象类
*/
public abstract class Action {
public abstract void getManConclusion(Man man);
public abstract void getWomanConclusion(Woman man);
}
3. 创建Element的抽象类
/**
* @author zlc
* @created 2017/12/24
* 人的抽象类
*/
public abstract class Person {
public abstract void accept(Action action);
}
4.创建具体访问者类
1.
/**
* @author zlc
* @created 2017/12/24
*/
public class Success extends Action{
@Override
public void getManConclusion(Man man) {
System.out.println("男人成功时,背后都有一个伟大的女人");
}
@Override
public void getWomanConclusion(Woman man) {
System.out.println("女人成功时,背后大多有一个不成功的男人");
}
}
2.
/**
* @author zlc
* @created 2017/12/24
*/
public class Failing extends Action{
@Override
public void getManConclusion(Man man) {
System.out.println("男人失败时,闷头喝酒,谁也不用劝");
}
@Override
public void getWomanConclusion(Woman man) {
System.out.println("女人失败时,眼泪汪汪,谁也劝不了");
}
}
3.
/**
* @author zlc
* @created 2017/12/24
*/
public class Loving extends Action{
@Override
public void getManConclusion(Man man) {
System.out.println("男人恋爱时,凡事不懂也要装懂");
}
@Override
public void getWomanConclusion(Woman man) {
System.out.println("女人恋爱时,遇事懂也装作不懂");
}
}
5.创建Element的具体实现类
/**
* @author zlc
* @created 2017/12/24
*/
public class Man extends Person{
@Override
public void accept(Action action) {
action.getManConclusion(this);
}
}
/**
* @author zlc
* @created 2017/12/24
*/
public class Woman extends Person{
@Override
public void accept(Action action) {
action.getWomanConclusion(this);
}
}
6. 创建ObjectStructure类 枚举它的元素
/**
* @author zlc
* @created 2017/12/24
*/
public class ObjectStructure {
private List<Person> peoples = new ArrayList<>();
//增加
public void attach(Person p){
peoples.add(p);
}
//移除
public void detach(Person p){
peoples.remove(p);
}
//查看显示
public void display(Action action){
for (Person p: peoples) {
p.accept(action);
}
System.out.println("----------------");
}
}
7. 测试类
@org.junit.Test
public void test(){
ObjectStructure o = new ObjectStructure();
o.attach(new Man());
o.attach(new Woman());
//成功
Success success = new Success();
o.display(success);
//失败
Failing failing = new Failing();
o.display(failing);
//恋爱
Loving loving = new Loving();
o.display(loving);
//结婚
Marriage marriage = new Marriage();
o.display(marriage);
}