我就是奇迹

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 组合模式(Composite Pattern)结构型设计模式 之一,它用于处理树形结构,让客户端可以一致地对待单个对象和对象的组合

 


 

1. 组合模式的核心思想

适用于树形结构(如组织架构、文件系统、GUI 组件)。

统一单个对象(叶子节点)和组合对象(容器节点)的操作

客户端无需关心是单个对象还是组合对象,可以一致地调用它们的方法。

 


 

2. 代码示例(Java 实现)

 

假设我们要设计一个 公司员工管理系统,其中:

Employee(员工)是一个通用接口

Manager(经理)可以管理多个员工(包括普通员工和其他经理),形成树状结构。

Developer(开发人员)是普通员工,不能再管理其他人

 

(1)定义组件接口

// 组件接口:定义通用操作
public interface Employee {
    void showDetails();  // 展示员工信息
}

(2)创建叶子节点(普通员工)

// 叶子节点:开发人员
public class Developer implements Employee {
    private String name;
    private String position;

    public Developer(String name, String position) {
        this.name = name;
        this.position = position;
    }

    @Override
    public void showDetails() {
        System.out.println("开发人员: " + name + ", 职位: " + position);
    }
}

(3)创建组合节点(管理者)

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

// 组合节点:经理
public class Manager implements Employee {
    private String name;
    private String position;
    private List<Employee> subordinates = new ArrayList<>(); // 下属员工列表

    public Manager(String name, String position) {
        this.name = name;
        this.position = position;
    }

    // 添加下属
    public void addEmployee(Employee employee) {
        subordinates.add(employee);
    }

    // 移除下属
    public void removeEmployee(Employee employee) {
        subordinates.remove(employee);
    }

    @Override
    public void showDetails() {
        System.out.println("经理: " + name + ", 职位: " + position);
        for (Employee employee : subordinates) {
            employee.showDetails(); // 递归展示所有下属
        }
    }
}

(4)测试组合模式

public class CompositePatternTest {
    public static void main(String[] args) {
        // 创建开发人员
        Employee dev1 = new Developer("Alice", "Java 开发");
        Employee dev2 = new Developer("Bob", "前端开发");

        // 创建经理,并添加下属
        Manager manager1 = new Manager("Charlie", "研发经理");
        manager1.addEmployee(dev1);
        manager1.addEmployee(dev2);

        // 创建更高级经理,并管理多个经理
        Manager generalManager = new Manager("David", "技术总监");
        generalManager.addEmployee(manager1);

        // 展示公司组织结构
        generalManager.showDetails();
    }
}

(5)运行结果

经理: David, 职位: 技术总监
经理: Charlie, 职位: 研发经理
开发人员: Alice, 职位: Java 开发
开发人员: Bob, 职位: 前端开发

组合模式让我们能够统一管理不同层级的对象!

 


 

3. 组合模式 vs. 其他模式

设计模式

作用

适用场景

组合模式

处理树形结构,统一管理单个对象和组合对象

组织架构、GUI 组件、文件系统

装饰器模式

动态添加功能

扩展已有对象的行为(如 I/O 流)

策略模式

选择不同的算法

不同支付方式、排序算法

 

 


 

4. Spring 框架中的应用

Spring SecurityCompositeFilter 允许多个安全过滤器组合在一起。

Spring AOP 允许多个切面(Advice)形成层级调用链。

Spring MVC 的 HandlerMapping 可以管理多个 Handler

 


 

5. 总结

组合模式适用于树形结构,如组织架构、GUI 组件、文件系统等。

统一单个对象(叶子节点)和组合对象(容器节点)的操作,让客户端无须关心对象层级。

Spring 框架和很多企业级应用中都广泛使用组合模式

posted on 2025-04-02 17:57  我就是奇迹  阅读(9)  评论(0)    收藏  举报