设计模式:组合模式示例

组合模式的典型例子通常涉及到树形结构的处理,下面是几个形象且易于理解的例子:

文件系统

在文件系统中,目录可以包含文件或者其他目录,但是从用户的角度来看,目录和文件都可以被“打开”或者“获取大小”。这里的目录就是一个组合对象,文件是叶子节点。

interface FileSystemItem {void showProperties();long getSize();
}class File implements FileSystemItem {private String name;private long size;public File(String name, long size) {this.name = name;this.size = size;}@Overridepublic void showProperties() {System.out.println("File: " + name + " (Size: " + size + ")");}@Overridepublic long getSize() {return size;}
}class Directory implements FileSystemItem {private String name;private List<FileSystemItem> children = new ArrayList<>();public Directory(String name) {this.name = name;}public void add(FileSystemItem item) {children.add(item);}@Overridepublic void showProperties() {System.out.println("Directory: " + name);for (FileSystemItem child : children) {child.showProperties();}}@Overridepublic long getSize() {long size = 0;for (FileSystemItem child : children) {size += child.getSize();}return size;}
}

图形界面组件

在图形用户界面(GUI)中,容器组件可以包含其他容器组件或者叶子组件(如按钮、文本框等)。无论是容器还是叶子组件,都可以对它们执行某些操作,如绘制、启用/禁用等。

interface GUIComponent {void render();
}class Button implements GUIComponent {@Overridepublic void render() {System.out.println("Render Button");}
}class Panel implements GUIComponent {private List<GUIComponent> children = new ArrayList<>();public void add(GUIComponent component) {children.add(component);}@Overridepublic void render() {System.out.println("Render Panel");for (GUIComponent child : children) {child.render();}}
}

组织结构

在组织结构中,公司可以分为部门,部门下可以有子部门或员工。部门和员工都可以执行某些操作,如获取成本。

interface OrganizationComponent {void printStructure();double getCost();
}class Employee implements OrganizationComponent {private String name;private double salary;public Employee(String name, double salary) {this.name = name;this.salary = salary;}@Overridepublic void printStructure() {System.out.println("Employee: " + name + ", Salary: " + salary);}@Overridepublic double getCost() {return salary;}
}class Department implements OrganizationComponent {private String name;private List<OrganizationComponent> members = new ArrayList<>();public Department(String name) {this.name = name;}public void add(OrganizationComponent component) {members.add(component);}@Overridepublic void printStructure() {System.out.println("Department: " + name);for (OrganizationComponent member : members) {member.printStructure();}}@Overridepublic double getCost() {double cost = 0;for (OrganizationComponent member : members) {cost += member.getCost();}return cost;}
}

在这些例子中,组合模式允许客户端以统一的方式操作单个对象和组合对象,这样的设计简化了客户端代码,并使得整个结构更加灵活。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/795134.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

租用阿里云的服务器多少钱?30元、61元、99元、165元、199元

租个阿里云的服务器多少钱&#xff1f;很便宜&#xff0c;云服务器2核2G3M固定带宽99元一年、2核4G服务器30元3个月、199元一年&#xff0c;轻量应用服务器2核2G3M配置61元一年、2核4G4M带宽165元一年&#xff0c;可以在阿里云CLUB中心查看 aliyun.club 当前最新的优惠券和活动…

GitOps - 为 OpenShift GitOps 配置邮件通知

《OpenShift 4.x HOL教程汇总》 说明&#xff1a;本文已经 在OpenShift 4.15 OpenShift GitOps 1.11.2 环境中验证 文章目录 ArgoCD 的 Notification 功能简介启动 OpenShift GitOps 的 Notification 功能配置邮件通知验证参考 说明&#xff1a;先根据《OpenShift 4 之 GitOp…

xv6源码分析 001

xv6源码分析 001 我们先看看xv6这个项目的基本结构&#xff08;只看代码部分&#xff09; 主要就是两个目录kernel 和 user。 user是一些用户程序&#xff0c;也就是我们平时在shell上面执行的命令&#xff0c;每执行一个命令就会创建一个新的用户进程来执行这个命令 在user目…

学习 Git 基础知识 - 日常开发任务手册

欢迎来到我关于 Git 的综合指南&#xff0c;Git 是一种分布式版本控制系统&#xff0c;已经在软件开发中彻底改变了协作和代码管理方式。 无论你是经验丰富的开发者还是刚开始编程之旅的新手&#xff0c;理解 Git 对于正确掌控代码、高效管理项目和与他人合作至关重要。 在本…

App应用的服务器如何增加高并发能力

大家好&#xff01;我是你们的好朋友咕噜铁蛋&#xff01;近年来&#xff0c;随着移动互联网的蓬勃发展&#xff0c;各类App应用如雨后春笋般涌现&#xff0c;用户量呈现爆发式增长。然而&#xff0c;随之而来的高并发访问问题也开始频繁出现&#xff0c;给服务器带来了极大的挑…

UV胶水与聚氯乙烯PVC材料的塑料粘接,效果如何?

UV胶水可以与聚氯乙烯PVC很好地粘接。 PVC是一种常见的塑料材料&#xff0c;UV胶水通常对PVC具有良好的粘接性能。UV胶水可以在紫外线照射下迅速固化&#xff0c;形成坚固的粘接&#xff0c;因此通常被用于PVC制品的粘接和修复。 UV胶水与PVC粘接的优点&#xff1a; 1. 快速固…

java数据结构与算法刷题-----LeetCode172. 阶乘后的零

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 数学&#xff1a;阶乘的10因子个数数学优化:思路转变为求5的倍数…

wordpress全站开发指南-面向开发者及深度用户(全中文实操)--创建新主题

前言 你可以在wordpress里面下载使用人家打包好的主题&#xff0c;但可能不是很好用&#xff0c;接下来就自己做一个自己的主题。你需要先找到xampp文件夹–htdocs–wordpress(我给更名为wplocal)–wp-content–themes 进入该文件夹之后你可以看到你之前下载导入的所有主题文件…

【Python第三方库】lxml 解析器和xpath路径语言

1.lxml是做什么的 是xml/html的解析器&#xff0c;主要是用来解析和提取html/xml数据 2.lxml语法 使用etree.HTML(html字符串)&#xff0c;将字符串转换为Element对象通过使用Element对象.xpath(语法)提取信息,返回的是一个列表的内存地址&#xff0c;需要通过使用索引获取信…

实验5-表达式求值算法

要求&#xff1a; 优化表达式求值算法&#xff0c;使得该算法可实现多位整数甚至浮点数的四则运算&#xff0c;并写程序进行验证 一下代码由AI生成&#xff0c;这个作业我是实在不想做了&#xff0c;老师上课讲的时候也是一笔带过&#xff0c;然后就要求我们自己动手写......…

redis的List详细介绍

Redis的列表&#xff08;List&#xff09;是一个由字符串组成的双向链表。以下是关于Redis列表的一些详细介绍&#xff1a; 基本概念&#xff1a; Redis的列表数据构造模式是一个双向链表&#xff0c;这意味着你可以在表头或表尾追加元素&#xff0c;从表头或表尾弹出元素。每个…

Java实现ATM机模拟系统(Week2)

目录 前言 项目规划&#xff08;第二周&#xff09; 具体实现 用户大类 AccountOperations接口 UserOperations接口 Operations类&#xff08;实现类&#xff09; Account类 User类 Area类 &#xff08;父类&#xff09; 货币大类 Money类&#xff08;抽象类&…

redis的Set详细介绍

Redis的集合&#xff08;Set&#xff09;是由字符串组成的无序集合&#xff0c;和列表&#xff08;List&#xff09;不同的是&#xff0c;集合中的元素是唯一的&#xff0c;不存在重复的元素。以下是关于Redis集合的一些详细介绍&#xff1a; 基本概念&#xff1a; Redis的集合…

vue + koa + Sequelize + 阿里云部署 + 宝塔:宝塔数据库连接

之前文章已经介绍了宝塔上传前后端代码并部署&#xff0c;不清楚的请看这篇文章&#xff1a; vue koa 阿里云部署 宝塔&#xff1a;宝塔前后端部署 下面是宝塔创建数据库&#xff1a; 我用的 koa Sequelize 连接的数据库&#xff0c;Sequelize 非常适合前端使用&#xf…

【Python】字符串处理技巧大揭秘:从基础到高级

欢迎来CILMY23的博客 本篇主题为 字符串处理技巧大揭秘&#xff1a;从基础到高级 个人主页&#xff1a;CILMY23-CSDN博客 Python系列专栏&#xff1a;http://t.csdnimg.cn/HqYo8 上一篇博客&#xff1a; http://t.csdnimg.cn/5NRlT C语言专栏&#xff1a; http://t.csdnim…

5543: 【J1】【vector】【pair】星空时代大比武

题目描述 星空时代人类发明了很多太空母舰用来开拓家园&#xff0c;现有2n&#xff08;n≤10&#xff09;艘太空母舰进行战斗力大小比较&#xff0c;角逐出谁是最强太空母舰。比赛规则如下&#xff1a;1 号太空母舰和 2 号太空母舰比赛&#xff0c;胜者晋级。3 号太空母舰和 4…

虚幻UE5智慧城市全流程开发教学

一、背景 这几年&#xff0c;智慧城市/智慧交通/智慧水利等飞速发展&#xff0c;骑士特意为大家做了一个这块的学习路线。 二、这是学习大纲 1.给虚幻UE5初学者准备的智慧城市/数字孪生蓝图开发教程 https://www.bilibili.com/video/BV1894y1u78G 2.UE5数字孪生蓝图开发教学…

Docker 安装 Linux 系统可视化监控 Netdata

docker 安装 netdata 前提准备Docker 两种方式部署 Netdata1、使用 docker run 命令运行 netdata 服务2、使用 docker compose 运行 netdata 服务 Netdata 服务可视化界面Netdata 汉化处理 前提准备 说明&#xff1a;此处使用 windows11 安装的 docker desktop & wsl2/apli…

大语言模型LLM《提示词工程指南》学习笔记01

文章目录 大语言模型LLM《提示词工程指南》学习笔记01以下是使用不同LLM提供程序时会遇到的常见设置&#xff1a;标准提示词应该遵循以下格式&#xff1a;提示词要素 大语言模型LLM《提示词工程指南》学习笔记01 提示工程&#xff08;Prompt Engineering&#xff09;是一门较新…

linux E: You don‘t have enough free space in /var/cache/apt/archives/. 空间不足

问题&#xff1a; 在ubuntu的亚马逊云计算机平台上&#xff0c;apt install的时候&#xff0c;报错&#xff0c;空间不足 解决方法&#xff1a; 查看磁盘情况&#xff1a; 设置自动清理&#xff1a; sudo apt-get autoclean sudo apt-get clean 解决&#xff1a;