UML

状态 相当于访问者

/** * @ClassName: Action * @Author: Leo * @Description: 状态 相当于访问者 * @Date: 2019/5/28 11:15 */
public abstract class Action {
    public abstract void getManConclusion(Man man);

    public abstract void getWomanConclusion(Woman woman);

}

成功的状态

/** * @ClassName: Success * @Author: Leo * @Description: 成功的状态 * @Date: 2019/5/28 11:19 */
public class Success extends Action {
    @Override
    public void getManConclusion(Man man) {
        System.out.println("男人成功时,背后多半有一个伟大的女人");
    }

    @Override
    public void getWomanConclusion(Woman woman) {
        System.out.println("女人成功时,背后大多有一个不成功的男人");
    }
}

失败的状态

/** * @ClassName: Failing * @Author: Leo * @Description: 失败的状态 * @Date: 2019/5/28 11:20 */
public class Failing extends Action {
    @Override
    public void getManConclusion(Man man) {
        System.out.println("男人失败时,闷头喝酒,谁也不用劝");
    }

    @Override
    public void getWomanConclusion(Woman woman) {
        System.out.println("女人失败时,眼泪汪汪,谁也劝不了");
    }
}

人 被访问的对象

/** * @ClassName: Person * @Author: Leo * @Description: 人 被访问的对象 * @Date: 2019/5/28 11:15 */
public abstract class Person {
    public abstract void accept(Action action);
}

男人

/** * @ClassName: Man * @Author: Leo * @Description: 男人 * @Date: 2019/5/28 11:18 */
public class Man extends Person {
    @Override
    public void accept(Action action) {
        action.getManConclusion(this);
    }
}

女人

/** * @ClassName: Woman * @Author: Leo * @Description: 女人 * @Date: 2019/5/28 11:18 */
public class Woman extends Person {
    @Override
    public void accept(Action action) {
        action.getWomanConclusion(this);
    }
}

对象结构类

import java.util.ArrayList;
import java.util.List;

/** * @ClassName: ObjectStructure * @Author: Leo * @Description: 对象结构类 * @Date: 2019/5/28 11:20 */
public class ObjectStructure {
    private List<Person> people = new ArrayList<>();

    public void add(Person person) {
        people.add(person);
    }

    public void remove(Person person) {
        people.remove(person);
    }

    /** * 针对不同的状态 遍历男人女人 做出对比 * * @param action */
    public void disPlay(Action action) {
        for (Person person : people) {
            person.accept(action);
        }
    }
}

测试类

/** * @ClassName: Main * @Author: Leo * @Description: 测试类 * @Date: 2019/5/28 11:15 */
public class Main {
    public static void main(String[] args) {
        ObjectStructure objectStructure = new ObjectStructure();
        objectStructure.add(new Man());
        objectStructure.add(new Woman());

        //对比男人女人成功时的不同反应
        Success success = new Success();
        objectStructure.disPlay(success);

        //对比男人女人失败时的不同反应
        Failing failing = new Failing();
        objectStructure.disPlay(failing);


    }
}

运行结果