组合模式:将对象合成树形结构

案例公司管理一个公司可以总公司和分公司,无论是总公司还是分公司都有自己的部门,如人力资源管理部门、财务部门。分公司可以建立自己不同地域的办事处。请使用组合模式打印某个公司的结构。 

package Composite;

abstract class Company {
    private String name;

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

    public String getName() {
        return name;
    }

    public abstract void add(Company company);
    public abstract void remove(Company company);
    public abstract void display(int depth);
    public abstract void lineOfDuty();

}
package Composite;

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

public class ConcreteCompanty extends Company{
    private List<Company> children = new ArrayList<>();

    public ConcreteCompanty(String name) {
        super(name);
    }

    @Override
    public void add(Company company) {
        children.add(company);
    }

    @Override
    public void remove(Company company) {
        children.remove(company);
    }

    @Override
    public void display(int depth) {
        for(int i=0;i<depth;i++)
            System.out.print("-");
        System.out.println(this.getName());
        for(Company company : children) {
            company.display(depth + 2);
        }
    }

    @Override
    public void lineOfDuty() {

    }
}
package Composite;

public class FinanceDepartment extends Company{
    public FinanceDepartment(String name) {
        super(name);
    }

    @Override
    public void add(Company company) {

    }

    @Override
    public void remove(Company company) {

    }

    @Override
    public void display(int depth) {
        for(int i=0;i<depth;i++)
            System.out.print("-");
        System.out.println(this.getName());
    }

    @Override
    public void lineOfDuty() {

    }
}
package Composite;

public class HRDepartment extends Company{
    public HRDepartment(String name) {
        super(name);
    }

    @Override
    public void add(Company company) {

    }

    @Override
    public void remove(Company company) {

    }

    @Override
    public void display(int depth) {
        for(int i=0;i<depth;i++)
            System.out.print("-");
        System.out.println(this.getName());
    }

    @Override
    public void lineOfDuty() {

    }
}
package Composite;

public class Client {
    public static void main(String[] args) {
        ConcreteCompanty root = new ConcreteCompanty("总公司");
        root.add(new HRDepartment("总公司人力资源部"));
        root.add(new FinanceDepartment("总公司财务部"));

        ConcreteCompanty comp = new ConcreteCompanty("分公司1");
        comp.add(new HRDepartment("分公司1人力资源部"));
        comp.add(new FinanceDepartment("分公司1财务部"));
        ConcreteCompanty comp1 = new ConcreteCompanty("分公司1办事处A");
        comp1.add(new HRDepartment("分公司1办事处人力资源部"));
        comp1.add(new FinanceDepartment("分公司1办事处财务部"));
        ConcreteCompanty comp2 = new ConcreteCompanty("分公司1办事处B");
        comp2.add(new HRDepartment("分公司1办事处B人力资源部"));
        comp2.add(new FinanceDepartment("分公司1办事处B财务部"));
        comp.add(comp1);
        comp.add(comp2);
        root.add(comp);

        ConcreteCompanty compt = new ConcreteCompanty("分公司2");
        compt.add(new HRDepartment("分公司2人力资源部"));
        compt.add(new FinanceDepartment("分公司2财务部"));
        root.add(compt);

        root.display(1);
    }
}

原文地址:https://blog.csdn.net/qq_63806300/article/details/134819499

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_49026.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注