• 组合模式12(15)


    树结构

    树:根->树枝->树叶

    总公司->分公司->分公司各部门

    根节点:总公司->总公司各部门

    package structural;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class CompositeMain {
    
        public static void main(String[] args) {
            
            //根节点,及根节点相关内容
            //总公司,及总公司所在部门
            HCompany root = new HCompany("大米时代公司");
            root.add(new LearnDepartment("总公司研发部门"));
            root.add(new DisciplineDepartment("总公司考核部门"));
            
            //树枝节点
            HCompany branchC1 = new HCompany("衡水分公司");
            branchC1.add(new LearnDepartment("衡水开发部"));
            branchC1.add(new DisciplineDepartment("衡水财政综合部门"));
            root.add(branchC1);//总公司中有分公司
            
            //树枝节点
            HCompany branchC2 = new HCompany("天水分公司");
            branchC2.add(new LearnDepartment("天水培训部"));
            branchC2.add(new DisciplineDepartment("天水行政综合部门"));
            root.add(branchC2);//总公司中有分公司
            
            System.out.println("=====组织架构图=====");
            root.display(1);
            System.out.println("====企业文化====");
            root.learn();
        }
    }
    
    //抽象构件
    abstract class ZCompany{
        
        protected String name;
        
        public ZCompany(String name){
            this.name = name;
        }
        
        public abstract void add(ZCompany c);
        public abstract void remove(ZCompany c);
        public abstract void display(int deptno);
        public abstract void learn();
    }
    
    //树叶构件
    class LearnDepartment extends ZCompany{
    
        public LearnDepartment(String name) {
            super(name);
        }
    
        @Override
        public void add(ZCompany c) {}
    
        @Override
        public void remove(ZCompany c) {}
    
        @Override
        public void display(int deptno) {
            System.out.println("学术部门:"+name+"->"+deptno);
        }
    
        @Override
        public void learn() {
            System.out.println("学习知识:"+name);
        }
    }
    
    //树叶构件
    class DisciplineDepartment extends ZCompany{
    
        public DisciplineDepartment(String name) {
            super(name);
        }
    
        @Override
        public void add(ZCompany c) {}
    
        @Override
        public void remove(ZCompany c) {}
    
        @Override
        public void display(int deptno) {
            System.out.println("纪律部门:"+name+"->"+deptno);
        }
    
        @Override
        public void learn() {
            System.out.println("学习纪律:"+name);
        }
    }
    //树叶结构没有行为能力(add和remove方法置空)
    //树枝结构
    class HCompany extends ZCompany{
    
        private List<ZCompany> list = new ArrayList<ZCompany>();
        public HCompany(String name) {
            super(name);
        }
        @Override
        public void add(ZCompany c) {
            list.add(c);
        }
    
        @Override
        public void remove(ZCompany c) {
            list.remove(c);
        }
    
        @Override
        public void display(int deptno) {
            for (ZCompany zCompany : list) {
                zCompany.display(deptno);
            }
        }
    
        @Override
        public void learn() {
            for (ZCompany zCompany : list) {
                zCompany.learn();
            }
        }
    }
  • 相关阅读:
    ACCP7.0-S2-复习自测-15测试分析
    线程
    多线程下的单例模式
    combobox 属性、事件、方法
    java的多线程总结
    爬虫--登录网页
    shell--字符串是否为空
    python--正则表达式 字符串匹配
    mysql---表所在数据库
    python--日期操作
  • 原文地址:https://www.cnblogs.com/zzlcome/p/11423353.html
Copyright © 2020-2023  润新知