组合模式

2018-10-31  本文已影响0人  要学的东西太多了

组合模式用于部分-整体的情况,如树状结构或文件目录式的结构,属于对象包含对象,适用于客户不需要关心整体组合对象和单个对象的不同,统一使用组合结构中的所有对象。通常组合对象持有一个子节点对象集合,且真正实现了操作集合的方法,子节点则不需要真正实现操作集合的方法,比如公司内部,公司老总管若干部门,每个部门老大管若干小组,每个小组组长管若干组员,老大发个通知,通知各个部门老大,再通知各个小组长,再通知各自组员。
示例:

public class Combination {
    public static void main(String[] args){
        Combination combination=new Combination();
        Man man=combination.new Man("");
        Man normalMan = combination.new Man("正常");
        Boy xiaoMing = combination.new Boy("小明");
        Boy xiaoLi = combination.new Boy("小李");
        Boy xiaoZhang = combination.new Boy("小张");
        normalMan.add(xiaoMing);
        normalMan.add(xiaoLi);
        normalMan.add(xiaoZhang);
        Man unNormalMan = combination.new Man("不正常");
        Boy xiaoHuang = combination.new Boy("小黄");
        unNormalMan.add(xiaoHuang);
        man.add(normalMan);
        man.add(unNormalMan);
        man.notify();
    }
    interface Person{
        void notify();
        void add(Person person);
    }

    class Man implements Person{
        private String type;

        public Man(String type) {
            this.type = type;
        }

        private List<Person> personList = new ArrayList<>();
        @Override
        public void notify() {
            System.out.println(type+"男人收到通知");
            for(Person p:personList){
                p.notify();
            }
        }

        @Override
        public void add(Person person) {
            personList.add(person);
        }
    }

    class Boy implements Person{
        private String name;

        public Boy(String name) {
            this.name = name;
        }

        @Override
        public void notify() {
            System.out.println("小男孩 "+name+" ,收到通知");
        }

        @Override
        public void add(Person person) {

        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读