当前位置: 首页 > news >正文

编程-设计模式 8:组合模式

设计模式 8:组合模式

定义与目的
  • 定义:组合模式又称为部分-整体模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
  • 目的:该模式的主要目的是将多个对象组织成树形结构以表示“部分-整体”的层次结构,并且能够一致地处理单个对象和组合对象。
实现示例

假设我们需要构建一个文件系统,其中包含文件夹和文件。我们可以使用组合模式来实现这个需求。

// 抽象组件 - 文件系统节点
abstract class FileSystemNode {protected String name;public FileSystemNode(String name) {this.name = name;}public abstract void add(FileSystemNode node);public abstract void remove(FileSystemNode node);public abstract void display(int depth);
}// 叶子组件 - 文件
class File extends FileSystemNode {public File(String name) {super(name);}@Overridepublic void add(FileSystemNode node) {throw new UnsupportedOperationException("Cannot add to a file.");}@Overridepublic void remove(FileSystemNode node) {throw new UnsupportedOperationException("Cannot remove from a file.");}@Overridepublic void display(int depth) {printDepth(depth);System.out.println("File: " + name);}private void printDepth(int depth) {for (int i = 0; i < depth; i++) {System.out.print("  ");}}
}// 复合组件 - 文件夹
class Directory extends FileSystemNode {private List<FileSystemNode> children = new ArrayList<>();public Directory(String name) {super(name);}@Overridepublic void add(FileSystemNode node) {children.add(node);}@Overridepublic void remove(FileSystemNode node) {children.remove(node);}@Overridepublic void display(int depth) {printDepth(depth);System.out.println("Directory: " + name);for (FileSystemNode child : children) {child.display(depth + 1);}}private void printDepth(int depth) {for (int i = 0; i < depth; i++) {System.out.print("  ");}}
}// 客户端代码
public class Client {public static void main(String[] args) {Directory root = new Directory("root");Directory documents = new Directory("documents");Directory pictures = new Directory("pictures");File report = new File("report.txt");File photo = new File("photo.jpg");documents.add(report);pictures.add(photo);root.add(documents);root.add(pictures);root.display(0);}
}
使用场景
  • 当你需要表示对象的分层结构时。
  • 当你想保持一致的接口,无论是处理单个对象还是处理对象组时。
  • 当你需要动态地在组合中添加和移除对象时。

组合模式通过将对象组织成树形结构,使得你可以使用相同的接口来操作单个对象或对象的组合。这对于需要管理复杂的层次结构的对象非常有用。

小结

组合模式是一种常用的结构型模式,它可以帮助你构建复杂的树形结构,并且让你能够以一致的方式处理单个对象和对象的集合。这对于需要表示具有层级关系的对象是非常有用的。

http://www.lryc.cn/news/420427.html

相关文章:

  • c语言指针(8.11)
  • 加密技术的发展
  • 编程-设计模式 22:策略模式
  • kafka 将log4j的项目升级到log4j2
  • 【CSP2019 模拟赛】Time
  • 二叉树相关的算法题
  • Unity URP 曲面细分学习笔记
  • 每天五分钟深度学习pytorch:训练神经网络模型的基本步骤
  • 【langchain学习】使用缓存优化langchain中的LLM调用性能:内存、SQLite与Redis的对比
  • spring boot 集成EasyExcel
  • 获取对象中第一个存在的值
  • Python学习笔记----集合与字典
  • c# 排序、强转枚举
  • “华为杯”第十六届中国研究生数学建模竞赛-C题:视觉情报信息分析
  • html+css+js网页设计 找法网2个页面(带js)ui还原度百分之90
  • 018 | backtrader回测反转策略
  • 《图解HTTP》全篇目录
  • 基于VS2019(Release_x64)+Qt的软件开发—环境配置
  • 【书生大模型实战营(暑假场)闯关材料】入门岛:第1关 Linux 基础知识
  • 240810-Gradio通过HTML组件打开本地文件+防止网页跳转到about:blank
  • go在linux上安装
  • 算法日记day 35(动归之分割等和子集|最后一块石头的重量2)
  • FPGA使用sv生成虚拟单音数据
  • Linux shell编程:监控进程CPU使用率并使用 perf 抓取高CPU进程信息
  • Linux网络编程的套接字分析(其一,基本知识)
  • 后端Web开发之Maven
  • 前端创新实践:用JavaScript打造网页扫码新体验
  • AWS CLI命令行
  • 领导力培养的底层逻辑
  • 【MATLAB第107期】基于MATLAB的Morris局部敏感性分析模型(无目标函数)