设计模式|组合模式(Composite Pattern)

什么是组合模式?

组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构以表示部分-整体的层次结构。这种模式使得客户端能够以统一的方式处理单个对象和组合对象。

主要角色

  • 组件(Component):定义了组合中对象的通用接口,可以是抽象类或接口。该接口通常包含对子节点的管理操作,比如添加子节点、删除子节点等。
  • 叶子(Leaf):表示组合中的叶子节点对象,叶子节点没有子节点。
  • 组合(Composite):表示组合中的容器节点对象,组合节点可以包含其他组件,即子节点。组合节点通常实现了组件接口中的操作,并且可以递归地调用子节点的操作。

举例

组织关系树

公司组织关系可能分为部门与人,其中人属于部门,有的人有下属,有的人没有下属。如果我们统一将部门、人抽象为组织节点,就可以方便的统计某个部门下有多少人、财务数据等等,而不用关心当前节点是部门还是人。

操作系统的文件夹与文件

操作系统的文件夹与文件也是典型的树状结构,为了方便递归出文件夹内文件数量或者文件总大小,我们最好设计的时候就将文件夹与文件抽象为文件,这样每个节点都拥有相同的方法添加、删除、查找子元素,而不需要关心当前节点是文件夹或是文件。

代码示例:文件系统

考虑一个文件系统的例子,其中文件和文件夹是节点,文件夹可以包含其他文件夹或文件。这是组合模式的一个典型应用场景。

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

// 组件接口
interface FileSystemComponent {
   
    String getName();
    int getSize();
}

// 文件类(叶子节点)
class File implements FileSystemComponent {
   
    private String name;
    priva

相关推荐

  1. 设计模式——组合模式

    2024-04-23 00:22:03       49 阅读
  2. 设计模式组合模式

    2024-04-23 00:22:03       40 阅读
  3. 设计模式组合模式

    2024-04-23 00:22:03       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-23 00:22:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-23 00:22:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-23 00:22:03       82 阅读
  4. Python语言-面向对象

    2024-04-23 00:22:03       91 阅读

热门阅读

  1. mybatis使用xml中的if-else/choose

    2024-04-23 00:22:03       34 阅读
  2. c#程序调用c++开发dll库

    2024-04-23 00:22:03       30 阅读
  3. C# AutoResetEvent

    2024-04-23 00:22:03       30 阅读
  4. MongoDB【五】索引

    2024-04-23 00:22:03       35 阅读
  5. 牛客网华为机试题说明一

    2024-04-23 00:22:03       32 阅读
  6. k8s的服务Service暴露应用

    2024-04-23 00:22:03       31 阅读
  7. 【c/c++】cpp对c的函数扩展

    2024-04-23 00:22:03       31 阅读
  8. 在k8s集群中部署EdgeMesh

    2024-04-23 00:22:03       42 阅读
  9. 【redis】String类型常用命令

    2024-04-23 00:22:03       32 阅读
  10. 【前端】数组的常用处理函数

    2024-04-23 00:22:03       36 阅读
  11. JG/T 396-2012 外墙用非承重纤维增强水泥板检测

    2024-04-23 00:22:03       40 阅读
  12. ipad 连接WiFi无网络

    2024-04-23 00:22:03       34 阅读