组合模式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();
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/zzlcome/p/11423353.html