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

结构性设计模式之Composite(组合)

结构性设计模式之Composite(组合)

摘要:
Composite(组合)模式通过树形结构表示"部分-整体"层次关系,使得用户能够统一处理单个对象和组合对象。该模式包含Component(组件接口)、Leaf(叶子节点)和Composite(组合节点)三个核心角色,适用于需要表示对象层次结构并统一操作的场景。示例代码展示了文件夹结构的实现,Folder类管理子组件,File类作为叶子节点,通过递归遍历实现统一处理。该模式简化了客户端代码,使系统更易扩展和维护。

1)意图;

将对象组合成树型结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。

2)结构

在这里插入图片描述

其中:

  • Componect 为组合中的对象声明接口:在适当情况下实现所有类共有接口的默认行为:

    声明一个接口用户访问和管理 Componect的子组件;(可选)在递归结构中定义一个

    接口,用于访问一个父组件,并在合适的情况下实现它。

  • Leaf 在组合中表示叶节点对象,叶结点没有子节点节点;在组合中定义图元对象的行为。

  • Composite定义有子组件的那些组件的行为;存储子组件;在Component接口中实现与子组件有关的操作。

  • Client 通过 Component 接口操纵组合组件的对象。

3)适用性

Composite 模式下适用于:

  • 想表示对象的部分-整体层次结构。
  • 希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

代码

import java.util.ArrayList;
import java.util.List;/*** @author psd 结构性设计模式之组合设计模式*/
public class ComponentDemo {public static void main(String[] args) {AbstractFile root = new Folder("root");AbstractFile folderA = new Folder("folderA");AbstractFile folderB = new Folder("folderB");AbstractFile fileC = new File("fileC");AbstractFile fileD = new File("fileD");AbstractFile fileE = new File("fileE");root.add(folderA);root.add(folderB);root.add(fileC);folderA.add(fileD);folderA.add(fileE);print(root);}private static void print(AbstractFile file) {file.printName();List<AbstractFile> childrenList = file.getChildren();if (childrenList == null) {return;}for (AbstractFile children : childrenList) {print(children);}}
}abstract class AbstractFile {protected String name;public void printName() {System.out.println(name);}public abstract boolean add(AbstractFile file);public abstract boolean remove(AbstractFile file);public abstract List<AbstractFile> getChildren();
}/*** 文件夹*/
class Folder extends AbstractFile {public Folder(String name) {this.name = name;}List<AbstractFile> children = new ArrayList<>();@Overridepublic boolean add(AbstractFile file) {return children.add(file);}@Overridepublic boolean remove(AbstractFile file) {return children.remove(file);}@Overridepublic List<AbstractFile> getChildren() {return children;}
}class File extends AbstractFile {public File(String name) {this.name = name;}@Overridepublic boolean add(AbstractFile file) {return false;}@Overridepublic boolean remove(AbstractFile file) {return false;}@Overridepublic List<AbstractFile> getChildren() {return null;}}

代码目录结构如下:

在这里插入图片描述
欢我的文章记得点个在看,或者点赞,持续更新中ing…


文章转载自:

http://FyAqoiao.ryxyz.cn
http://4RKTOZNs.ryxyz.cn
http://tGZaVpYJ.ryxyz.cn
http://JQZOqXhq.ryxyz.cn
http://8RgEKFeO.ryxyz.cn
http://Sif9AkKV.ryxyz.cn
http://54HLzDuD.ryxyz.cn
http://DD6fQZOY.ryxyz.cn
http://5b9U9CxP.ryxyz.cn
http://SVA5Njwf.ryxyz.cn
http://5nuaoGeA.ryxyz.cn
http://sjJ4bTfV.ryxyz.cn
http://n35kuCRL.ryxyz.cn
http://ic68J32l.ryxyz.cn
http://ALMTdj1p.ryxyz.cn
http://KYrfMsWt.ryxyz.cn
http://7kgqv9x9.ryxyz.cn
http://4C9Chg3R.ryxyz.cn
http://NbdCcx6L.ryxyz.cn
http://TTaOHrEb.ryxyz.cn
http://3e8Y77qH.ryxyz.cn
http://ir0wEJEf.ryxyz.cn
http://zzChLenW.ryxyz.cn
http://8Mu9wFAu.ryxyz.cn
http://Ud9x5rcD.ryxyz.cn
http://NmPt3dMt.ryxyz.cn
http://Gq8xPBwQ.ryxyz.cn
http://O6r9Ndi1.ryxyz.cn
http://s8oUxb0L.ryxyz.cn
http://icdgAv7n.ryxyz.cn
http://www.dtcms.com/a/228488.html

相关文章:

  • 从Java的JDK源码中学设计模式之装饰器模式
  • Ubuntu 系统部署 MySQL 入门篇
  • 深入理解汇编语言中的顺序与分支结构
  • 黑马程序员TypeScript课程笔记2(11-20)
  • 数据库密码加密
  • 【R语言编程绘图-mlbench】
  • 运行shell脚本时报错/bin/bash^M: 解释器错误: 没有那个文件或目录
  • 网络安全-等级保护(等保)3-0 等级保护测评要求现行技术标准
  • 鸿蒙开发:应用内如何做更新
  • 解决VS Code误报Java问题的终极方法
  • SpringBoot核心注解详解及3.0与2.0版本深度对比
  • 华为云Flexus+DeepSeek征文|基于华为云Flexus X实例的小说转语音助手应用构建实录
  • Kerberos面试内容整理-Kerberos 的配置与排障
  • 基于 COM 的 XML 解析技术(MSXML) 的总结
  • CRM管理软件的数据可视化功能使用技巧:让数据驱动决策
  • R语言使用随机过采样(Random Oversampling)平衡数据集
  • 电脑远程桌面连接如何设置端口?默认修改和内网给外网访问方法
  • sqlite3 命令行工具详细介绍
  • Ansys Zemax | 手机镜头设计 - 第 3 部分:使用 STAR 模块和 ZOS-API 进行 STOP 分析
  • C++ set数据插入、set数据查找、set数据删除、set数据统计、set排序规则、代码练习1、2
  • Pandas 技术解析:从数据结构到应用场景的深度探索
  • 重新审视自回归语言模型的知识蒸馏
  • LeetCode Hot100刷题——完全平方数
  • 【HarmonyOS 5】鸿蒙APP使用【团结引擎Unity】开发的案例教程
  • Unity Mac 笔记本操作入门
  • 线性回归用于分类
  • go语言基础|slice入门
  • matlab符号计算
  • 【灵动Mini-F5265-OB】vscode+gcc工程创建、下载、调试
  • 【小红书】API接口,获取笔记核心数据