魔术桌
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • DesignPattern - 组合模式

文章摘要: 组合模式使用总结。

简介

简要说明

  • 组合模式(Composite Pattern)是一种结构型设计模式。
  • 将对象组合成树形结构以表示“部分-整体”的层次结构。
  • 可以统一使用单个对象和组合对象。

主要功能

  • 表示树形结构。
  • 简化代码,可以一致地使用组合结构和单个对象。
  • 定义了包含基本对象和组合对象的类层次结构。

注意事项

  • 确保叶子和组合对象拥有相同的接口。
  • 在实现组合模式时,要小心递归结构,避免无限循环。
  • 可能会导致设计过于一般化,从而使得设计变得更加复杂。

适用场景

  • 当你希望客户端可以忽略单个对象与组合对象的不同,统一使用它们时。
  • 处理树形结构或部分-整体层次结构时。

Java 8

案例

// 组件接口,定义了叶子和组合对象共有的操作
interface Component {
    void operation();
}

// 叶子节点,实现组件接口
class Leaf implements Component {
    private String name;

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

    @Override
    public void operation() {
        // 叶子节点的操作
        System.out.println("Leaf " + name + ": Operation");
    }
}

// 组合对象,实现组件接口,并包含子组件
class Composite implements Component {
    private List<Component> children = new ArrayList<>();

    @Override
    public void operation() {
        // 执行组合对象自身的操作,并递归调用子组件的操作
        for (Component child : children) {
            child.operation();
        }
    }

    // 添加子组件
    public void add(Component component) {
        children.add(component);
    }

    // 移除子组件
    public void remove(Component component) {
        children.remove(component);
    }
}

// 客户端代码,使用组合模式
public class CompositePatternDemo {
    public static void main(String[] args) {
        // 创建组合对象
        Composite root = new Composite();
        root.add(new Leaf("Leaf A"));
        root.add(new Leaf("Leaf B"));

        // 创建另一个组合对象
        Composite composite = new Composite();
        composite.add(new Leaf("Leaf X"));
        composite.add(new Leaf("Leaf Y"));

        // 将组合对象添加到根组合对象中
        root.add(composite);

        // 执行操作,将递归调用所有叶子和组合对象的操作
        root.operation();
    }
}

注释

  • 在这个例子中,我们定义了一个组件接口Component,它定义了叶子和组合对象共有的操作。Leaf类是叶子节点,实现了组件接口,并提供了具体的操作实现。Composite类是组合对象,它实现了组件接口,并包含了一个子组件列表。组合对象可以添加和移除子组件,并在执行操作时递归调用所有子组件的操作。
  • 客户端代码创建了叶子和组合对象,并将它们组合成一个树形结构。客户端通过调用根组合对象的operation方法来执行所有组件的操作,而不需要关心它们是叶子节点还是组合对象。这样就实现了对单个对象和组合对象的一致处理。
更新时间: 2025/10/3 17:56