组合模式

1. 定义

创建了对象组的树形结构,将对象组合成树状结构以表示"整体-部分"的层次关系。

2. 代码

场景:大学下面有多个学院,学院下有多个部门,大学可以操作学院,学院可以操作部门。

@Data
abstract class Organization{
    private String name;

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

    protected void add(Organization organization){
        throw new UnsupportedOperationException();
    }

    protected void remove(Organization organization){
        throw new UnsupportedOperationException();
    }

    protected abstract void print();
}

class University extends Organization{
    List<Organization> organizations = new ArrayList<>();

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

    @Override
    protected void add(Organization organization) {
        organizations.add(organization);
    }

    @Override
    protected void remove(Organization organization) {
        organizations.remove(organization);
    }

    @Override
    protected void print() {
        System.out.println("---------------" + getName() + "--------------");
        for (Organization organization : organizations) {
            organization.print();
        }
    }
}

class College extends Organization{
    List<Organization> organizations = new ArrayList<>();

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

    @Override
    protected void add(Organization organization) {
        organizations.add(organization);
    }

    @Override
    protected void remove(Organization organization) {
        organizations.remove(organization);
    }

    @Override
    protected void print() {
        System.out.println("-------" + getName() + "------");
        for (Organization organization : organizations) {
            organization.print();
        }
    }
}

class Department extends Organization{
    public Department(String name) {
        super(name);
    }

    @Override
    protected void print() {
        System.out.println("--" + getName() + "--");
    }
}
public class Client {
    public static void main(String[] args) {
        // 大学
        Organization university = new University("清华大学");
        // 学院
        Organization computerCollege = new College("计算机学院");
        Organization infoCollege = new College("信息工程学院");
        // 将部门加入学院
        computerCollege.add(new Department("人事部"));
        computerCollege.add(new Department("后勤部"));
        infoCollege.add(new Department("学工办"));
        infoCollege.add(new Department("信息中心"));
        // 将学院加入学校
        university.add(computerCollege);
        university.add(infoCollege);
        // 输出
        university.print();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值