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();
    }
}

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

你可能感兴趣的:(JAVA设计模式,java,组合模式,开发语言,设计模式)