Java组合模式在项目中使用场景

一、介绍

将对象组合成树形结构以表示“部分-整体”的层次关系。组合模式使得用户对单个对象和组合对象的使用都是相同的。

组合模式主要由以下几个部分构成:

  1. Component(组件):定义了叶子节点和组合节点的公共接口,可以包含一些默认的行为或属性。
  2. Leaf(叶子节点):表示树中的叶子结点对象,叶子结点没有子节点。
  3. Composite(组合节点):表示树中的组合结点对象,它可以拥有子节点,并且实现了与 Component 相关的操作。

二、人员管理系统使用案例

需求:人员管理系统,要求能够管理公司中的员工和部门,同时能够展示整个公司的组织架构。

  • 组件:Person接口表示人员
// 1. 定义接口
public interface Person {
    void displayDetails();
}
  • 叶子节点:Employee类表示员工类,实现了Person接口
// 2. 实现叶子节点
public class Employee implements Person {
    private String name;

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

    @Override
    public void displayDetails() {
        System.out.println("Employee: " + name);
    }
}
  • 组合节点:Department类表示部门类,实现了Person接口。在Department类中包含一个列表用于存储人员Person对象。部门类中实现addPerson添加removePerson删除员工和部门的功能,并实现展示公司组织架构的displayDetails方法。
// 3. 创建组合节点
import java.util.ArrayList;
import java.util.List;

public class Department implements Person {
    private String name;
    private List<Person> people;

    public Department(String name) {
        this.name = name;
        this.people = new ArrayList<>();
    }

    public void addPerson(Person person) {
        people.add(person);
    }

    public void removePerson(Person person) {
        people.remove(person);
    }

    @Override
    public void displayDetails() {
        System.out.println("Department: " + name);
        for (Person person : people) {
            person.displayDetails();
        }
    }
}
  • 创建各种类型的叶子节点和组合节点,并进行组合成树形结构。然后调用顶层的展示方法来展示整个结构
// 4. 客户端代码
public class CompositePatternDemo {
    public static void main(String[] args) {
        // 创建叶子节点
        Employee emp1 = new Employee("John");
        Employee emp2 = new Employee("Alice");
        Employee emp3 = new Employee("Bob");

        // 创建组合节点
        Department dept1 = new Department("Engineering");
        dept1.addPerson(emp1);
        dept1.addPerson(emp2);

        Department dept2 = new Department("Marketing");
        dept2.addPerson(emp3);

        // 将部门组合成公司
        Department company = new Department("Our Company");
        company.addPerson(dept1);
        company.addPerson(dept2);

        // 展示整个公司结构
        company.displayDetails();
    }
}

组合模式通常用于表示具有层次结构的对象,例如文件系统、组织结构等,其中叶子节点和组合节点共享同一个接口。这种设计使得对待单个对象和组合对象的方式保持一致。

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Java语录精选

你的鼓励是我坚持下去的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值