组合模式(Composite Pattern)

文章介绍了组合模式在Java中的应用,通过抽象的Component类和具体类如Company和Department,构建了一个组织机构的树形结构,客户端可以统一处理单个对象和组合对象,展示了如何添加、删除部门并打印整个层次结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

组合模式是一种结构型设计模式,它允许将对象组合成树形结构来表示整体-部分层次结构。组合模式使得客户端可以统一处理单个对象和组合对象,而不必关心它们的具体类型。

1 结构图

在这里插入图片描述

2 代码展示

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

// 组织机构抽象类
abstract class Component {
    protected String name;

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

    public abstract void print();
}

// 具体的组织机构类:公司---相当于Composite组合类
class Company extends Component {
    private List<Component> departments;

    public Company(String name) {
        super(name);
        departments = new ArrayList<>();
    }

    public void addDepartment(Component department) {
        departments.add(department);
    }

    public void removeDepartment(Component department) {
        departments.remove(department);
    }

    public void print() {
        System.out.println("Company: " + name);
        System.out.println("Departments: ");
        for (Component department : departments) {
            department.print();
        }
    }
}

// 具体的组织机构类:部门
class Department extends Component {
    public Department(String name) {
        super(name);
    }

    public void print() {
        System.out.println("Department: " + name);
    }
}

// 客户端使用组合模式
public class Client {
    public static void main(String[] args) {
        // 创建公司
        Company company = new Company("WEH Company");

        // 创建部门
        Department department1 = new Department("HR Department");
        Department department2 = new Department("Finance Department");
        Department department3 = new Department("IT Department");

        // 将部门添加到公司中
        company.addDepartment(department1);
        company.addDepartment(department2);
        company.addDepartment(department3);

        // 打印组织机构树
        company.print();
    }
}

运行以上代码,输出结果为:
在这里插入图片描述

3 总结

在这个示例中,CompanyDepartment都继承了Component抽象类。Company类包含一个List用于存储部门,它可以添加、删除和打印这些部门。Department类只关心自己的名字,它实现了print方法用于打印部门的信息。
通过使用组合模式,客户端可以统一处理公司和部门对象,无需关心它们的具体类型。这样,可以方便地操作整个组织机构的层次结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_WEH_coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值