23种设计模式【结构型模式】详细介绍之【组合模式】

23种设计模式【结构型模式】详细介绍之【组合模式】

  • 设计模式的分类和应用场景总结
  • 组合模式详解
    • [1. 概述](#1. 概述)
    • [2. 组成部分](#2. 组成部分)
    • [3. 实现方式](#3. 实现方式)
    • [4. 组合模式的优缺点](#4. 组合模式的优缺点)
      • [4.1 优点](#4.1 优点)
      • [4.2 缺点](#4.2 缺点)
    • [5. 使用场景](#5. 使用场景)
    • [6. 实际应用](#6. 实际应用)
    • [7. 总结](#7. 总结)

设计模式的分类和应用场景总结

可以查看专栏设计模式:设计模式

组合模式详解

组合模式是一种结构型设计模式,旨在将对象组合成树形结构以表示"部分-整体"的层次结构,使客户端能够以一致的方式处理单个对象和组合对象。

1. 概述

组合模式允许将对象组合成树状结构,从而能够统一处理个体对象和组合对象。适用于表示层次结构的数据,如文件系统、图形界面组件、组织结构等。

2. 组成部分

  • 组件(Component): 定义了对象的接口,可以包含默认行为。
  • 叶子(Leaf): 表示树的叶节点,不能有子节点,通常实现基本操作。
  • 组合(Composite): 容器对象,定义有子部件的行为,存储和操作子部件。

3. 实现方式

以下是组合模式的实现示例:

java 复制代码
import java.util.ArrayList;
import java.util.List;

// 组件接口
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<>();

    public void add(Component component) {
        children.add(component);
    }

    public void remove(Component component) {
        children.remove(component);
    }

    @Override
    public void operation() {
        System.out.println("Composite operation");
        for (Component child : children) {
            child.operation();
        }
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Leaf leaf1 = new Leaf("1");
        Leaf leaf2 = new Leaf("2");
        Composite composite = new Composite();
        composite.add(leaf1);
        composite.add(leaf2);

        Composite root = new Composite();
        root.add(composite);
        root.add(new Leaf("3"));

        root.operation();
    }
}

4. 组合模式的优缺点

4.1 优点

  • 一致性: 客户端可以一致地使用组合和叶子节点。
  • 简化客户端代码: 处理复杂树结构时不需关心对象的类型。
  • 易于扩展: 方便添加新类型的叶子或组合类。

4.2 缺点

  • 设计复杂性增加: 需要创建较多的类来表示树的节点和组合。
  • 可能产生过多的对象: 当组件数量过多时,可能增加系统开销。

5. 使用场景

组合模式适用于以下场景:

  • 表示对象的部分-整体层次结构: 如文件系统、菜单系统、组织结构等。
  • 客户端需要统一处理组合对象和单个对象: 简化客户端代码。

6. 实际应用

  • 文件系统: 文件和文件夹可以作为叶子和组合,统一处理。
  • GUI组件: 按钮、窗口、面板等可以作为组合组件。
  • 企业组织结构: 部门和员工可以组合成树形结构。

7. 总结

组合模式通过将对象组合成树形结构,使客户端可以统一地处理单个对象和组合对象,增强了系统的灵活性和可扩展性。它是一种非常有效的方式来管理和操作层次结构数据,简化了复杂结构的管理。

版权声明:
原创博主:牛哄哄的柯南
博主原文链接:https://keafmd.blog.csdn.net/
个人博客链接:https://www.keafmd.top/

**看完如果对你有帮助,感谢点击下面的点赞支持!

哈哈\]\[抱拳\]** ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201023201048810.gif) **加油!** **共同努力!** **Keafmd** **感谢支持牛哄哄的柯南,期待你的三连+关注\~\~** **keep accumulate for my dream【共勉】** ↓ ↓ ↓ ↓ ↓ ↓

相关推荐
ghost14312 小时前
C#学习第23天:面向对象设计模式
开发语言·学习·设计模式·c#
敲代码的 蜡笔小新16 小时前
【行为型之迭代器模式】游戏开发实战——Unity高效集合遍历与场景管理的架构精髓
unity·设计模式·c#·迭代器模式
智慧城市203017 小时前
麦肯锡110页PPT企业组织效能提升调研与诊断分析指南
组合模式·柔性数组
敲代码的 蜡笔小新1 天前
【行为型之命令模式】游戏开发实战——Unity可撤销系统与高级输入管理的架构秘钥
unity·设计模式·架构·命令模式
m0_555762901 天前
D-Pointer(Pimpl)设计模式(指向实现的指针)
设计模式
小Mie不吃饭1 天前
【23种设计模式】分类结构有哪些?
java·设计模式·设计规范
君鼎2 天前
C++设计模式——单例模式
c++·单例模式·设计模式
敲代码的 蜡笔小新2 天前
【行为型之中介者模式】游戏开发实战——Unity复杂系统协调与通信架构的核心秘诀
unity·设计模式·c#·中介者模式
令狐前生2 天前
设计模式学习整理
学习·设计模式
敲代码的 蜡笔小新2 天前
【行为型之解释器模式】游戏开发实战——Unity动态公式解析与脚本系统的架构奥秘
unity·设计模式·游戏引擎·解释器模式