设计模式c#语言描述——合成(Composite)模式

华为od统一考试B卷【宜居星球改造计划】Java&Go 实现 XXX年,人类通过对火星的大气进行宜居改造分析,使得火星已在理论上具备人类宜居的条件,由于技术原因,无法一次性将火星大气全部改造,只能通过局部处理形式,假设将火星待改造的区域为row * column的网格每个网格有3个值,宜居区、可改造区、死亡区,使用YES、NO、NA代替,YES表示该网格已经完成大气改造,NO表示该网格未进行改造,后期可进行改造,NA表示死亡区,不作为判断是否改造完成的宜居,无法穿过 初始化下,该区域可能存在多个宜居区,并且每个宜居区能同时在每个太阳日单位向上下左右四个方向的相邻格子进 阅读详情

设计模式c#语言描述——合成(Composite)模式

 

*本文参考了《JAVA与模式》的部分内容,适合于设计模式的初学者。

 

合成模型模式属于对象的结构模式,有时又叫做部分-整体模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。如文件夹与文件就是合成模式的典型应用。根据模式所实现接口的区别,合成模式可分为安全式和透明式两种。

 

安全式的合成模式要求管理聚集的方法只出现在树枝构件类中,而不出现在树叶构件类中。类图如下所示:

涉及到三个角色:

 

抽象构件(Component):这是一个抽象角色,它给参加组合的对象定义公共的接口及其默认的行为,可以用来管理所有的子对象。合成对象通常把它所包含的子对象当做类型为Component的对象。在安全式的合成模式里,构件角色并不定义出管理子对象的方法,这一定义由树枝构件对象给出。

树叶构件(Leaf):树叶对象是没有下级子对象的对象,定义出参加组合的原始对象的行为。

树枝构件(Composite):代表参加组合的有下级子对象的对象。树枝构件类给出所有的管理子对象的方法,如Add(),Remove()等。

 

Component:

public interface Component

{

     void sampleOperation();

 

}// END INTERFACE DEFINITION Component

 

Leaf:

public class Leaf  : Component

{

     public void sampleOperation()

{

     }

}// END CLASS DEFINITION Leaf

    

Composite:

     public class Composite :Component

     {

         private ArrayList componentList=new ArrayList();

 

         public void sampleOperation()

         {

              System.Collections.IEnumerator myEnumerator = componentList.GetEnumerator();

              while ( myEnumerator.MoveNext() )

              {

                   ((Component)myEnumerator.Current).sampleOperation();

              }

         }

 

         public void add(Component component)

         {

         componentList.Add (component);

         }

 

         public void remove(Component component)

         {

         componentList.Remove (component);

         }

 

     }// END CLASS DEFINITION Composite

 

与安全式的合成模式不同的是,透明式的合成模式要求所有的具体构件类,不论树枝构件还是树叶构件,均符合一个固定的接口。类图如下所示:

 

抽象构件(Component):这是一个抽象角色,它给参加组合的对象定义公共的接口及其默认的行为,可以用来管理所有的子对象。要提供一个接口以规范取得和管理下层组件的接口,包括Add(),Remove()。

树叶构件(Leaf):树叶对象是没有下级子对象的对象,定义出参加组合的原始对象的行为。树叶对象会给出Add(),Remove()等方法的平庸实现。

树枝构件(Composite):代表参加组合的有下级子对象的对象。定义出这样的对象的行为。

 

Component:

public interface Component

     {

         void sampleOperation();

 

         void add(Component component);

 

         void remove(Component component);

 

     }// END INTERFACE DEFINITION Component

 

Leaf:

     public class Leaf  : Component

     {

       private ArrayList componentList=null;

 

         public void sampleOperation()

         {

        

         }

         public void add(Component component)

         {

 

         }

         public void remove(Component component)

         {

 

         }

     }// END CLASS DEFINITION Leaf

 

Composite:

     public class Composite :Component

     {

 

         private ArrayList componentList=new ArrayList();

 

         public void sampleOperation()

         {

              System.Collections.IEnumerator myEnumerator = componentList.GetEnumerator();

              while ( myEnumerator.MoveNext() )

              {

                   ((Component)myEnumerator.Current).sampleOperation();

              }

         }

 

         public void add(Component component)

         {

         componentList.Add (component);

         }

 

         public void remove(Component component)

         {

         componentList.Remove (component);

         }

 

     }// END CLASS DEFINITION Composite

 

 

 

【1】Python交叉编译到OpenHarmony标准系统运行(arm32位) 本文介绍如何Python语言如何在OpenHarmony标准系统运行,包括5.0r和4.1r以及4.0r,和未来版本的OpenHarmony版本上。 Python语言在OpenHarmony上使用,需要将Python解释器CPython移植到OpenHarmony标准系统。通过交叉编译的方式。 阅读详情

相关推荐

baostock实战:如何用Python批量下载多只股票的历史数据(含常见错误排查)

本文详细介绍了如何使用Python和baostock库批量下载多只股票的历史数据。内容涵盖从环境搭建、代码标准化到构建稳健的批量下载框架的全过程,并重点提供了高级错误处理、网络重试、数据验证及内存管理等实战解决方案,帮助用户高效构建股票数据处理流水线。

nice1的博客 1081

设计模式c#语言描述——合成(Composite)模式

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 460

【STM32实战】利用STM32CubeMX配置PWM互补输出驱动电机

本文详细介绍了如何利用STM32CubeMX配置STM32高级定时器的PWM互补输出功能,以驱动电机等需要半桥/全桥电路的应用。通过图形化界面设置定时器参数、使能互补通道并配置关键的死区时间,结合代码示例演示了如何启动PWM输出和动态调整占空比,确保输出安全、精确的互补信号,避免MOS管直通风险,提升驱动可靠性。

weixin_29161785的博客 535

设计模式c#语言描述——建造者模式、适配器模式、合成(Composite)模式

设计模式c#语言描述——建造者模式设计模式c#语言描述——建造者(builder)模式 *本文参考了《JAVA与模式》的部分内容,适合于设计模式的初学者。 建造模式是对象的创建模式。建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。 一个产品常有不同的组成成分作为产品的零件,它们通常叫做产品的内部表象。不同的产品可以有不同的内

zhiyang202_____________________________________________________________________ 1280

stm32H743基于CubeMX配置为双ADC多通道DMA规则采样

stm32H743的ADC支持的最大频率为36MHz,有相关资料上说是可以超频,具体技术细节不多讨论。 需求: 使用stm32H743的ADC采集5路ovrc

xtqbp的博客 4362

Field-Oriented Control (FOC) 矢量控制 磁场定向控制

Field-Oriented Control (FOC) 磁场定向控制(FOC),也称为矢量控制,是一种用于控制永磁同步电动机(PMSM)和交流感应电动机(ACIM)的技术。 FOC在整个扭矩和速度范围内都具有良好的控制能力。 FOC的实现需要将定子电流从固定参考系转换为转子磁通参考系(也称为d-q参考系)。 速度控制和转矩控制是FOC最常用的控制模式。位置控制模式不太常见。大多数牵引应用使用转矩控制模式,在该模式下,电动机控制系统遵循参考转矩值。在速度控制模式下,电机控制器遵循参考速度值,并生成用于形成内

>>> 1万+

23种设计模式之《组合模式(Composite)》在c#中的应用及理解

组合模式通过将对象组合成树形结构来表示“部分-整体”的层次结构,使得客户端可以统一地处理单个对象和组合对象。这种模式非常适合用于需要处理树形结构的场景,如文件系统、菜单系统等。通过组合模式,我们可以简化客户端代码,并提高系统的灵活性和可扩展性。

yuanpan的专栏 866

使用【阿里云百炼】搭建自己的大模型

本文介绍阿里云百炼大模型平台,其为企业级服务平台,融合通义千问等模型,支持多模态能力,提供一站式工具降低开发门槛。重点讲解智能体应用及大模型搭建步骤,含进入创新应用界面、选模型配参数、输指令、导数据、加载知识库、获取API Key、加样例库、配置MCP,还提及模型调试与多平台发布,并附试用链接,助力企业与开发者快速搭建适配业务的AI模型。

Larry的博客 4738

⭐️C#零基础到入门 ⭐️| 带你认识编程中的—23种设计模式 & 六大设计原则

设计模式介绍。 设计模式:是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。设计模式使代码开发真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。只有夯实地基搭好结构,才能盖好坚壮的大楼。也是我们迈向高级开发人员必经的一步。

努力前行,总会成为自己心中的那道光 5064

微信小程序 - 强力解决wx.getLocation定位不准的问题,如何修正微信小程序wx.getLocation获取用户位置信息不准确解决办法(高精度定位还是不够精准,定位不准有偏差,彻底消除误差)

如何解决getLocation定位偏差的问题?微信小程序API—wx.getLocation定位不准的问题,微信小程序wx.getLocation获取用户位置信息不准确解决办法,解决微信小程序wx.getLocation定位不准的问题,定位不准确,实际位置偏差大,相差几公里,微信小程序wx.getLocation获取用户位置信息不准确解决办法,关于微信小程序获取准确定位的方法及解决定位不准确的问题,偏差太多好几百米,wx.getLocation 返回定位精度不准问题,如何消除这个误差,开启高精度定位依旧有误

🏆 前端领域优质创作者 1万+

你分得清ChatGPT、Gemini、Grok、豆包、千问、DeepSeek、OpenClaw、CloudCode、vibeCodeing、sKill、MCP,飞书、微信这些到底是什么吗?

AI技术生态呈现层级化发展,从基础模型到应用平台形成完整技术栈。核心分为五层:模型层(GPT、Gemini等基础模型)→AI助手层(ChatGPT等应用产品)→工具层(ClaudeCode等开发工具)→协议层(MCP等接口标准)→应用层(微信、飞书等平台)。未来趋势将形成"模型公司-开发框架-应用生态"三层结构,AI正逐步演变为新型操作系统,通过标准化协议连接各类外部系统,实现能力调用与生态整合。技术发展呈现出从底层基础设施到上层应用场景的垂直整合特征。

hy行者勇哥的博客 397

C#设计模式总览

本文是一篇个人学习笔记,主要用于作者日后的复习回顾。通过目录可以快速查阅相关内容,方便知识点的巩固与查找。

qq_41571387的博客 23

KylinOS 离线安装 MinIO【图文步骤】

在国产操作系统 KylinOS 中安装 MinIO,详细步骤...

甘蓝的专栏 1535

用设计模式固化C#程序

译序: C#进阶文章。译者对Samir提供的C#例子进行了简单整理(作者提供的某些代码在译者的环境中无法通过编译),并编写了对应的C++示例,一并置于译注中,以便读者比对。译文中所有C#、C++程序调试环境均为Microsoft Visual Studio.NET 7.0 Beta2。   概要: 通过提供一个框架,设计模式可以解决应用开发中的许多问题。模式使得设计过程更加清晰高效,它特别适用

ForeverIcePoint的专栏 762

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C 23种设计模式示例源代码及PDF

C# 23种设计模式示例源代码及PDF 去发现同类优质开源项目:https://gitcode.com/ 本仓库提供了C#实现的23种常见设计模式的示例源代码及对应的PDF文档。 设计模式是在软件设计中经常出现的问题的通用、可重用的解决方案。它们是在许多不同情境下用来解决常见问题的经过验证的设计方案。掌握设计模式有助于提高代码的可维护性和可扩展性。 本仓库包含以下内容: FACTORY —生产不...

gitblog_06786的博客 807

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C#设计模式

C#设计模式 C#中有23种不同的设计模式,设计模式比较抽象,难于理解,本文作者旨在让开发者能从现实生活中理解设计模式,个人看了感觉还不错。设计模式属于比较高级的内容,有些东西感觉用不到,但是了解一下还是好的,其中有几个还是作为.net高级开发工程师必备的。 创建型模式 1、FACTORY 追MM少...

weixin_30776863的博客 104

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

lol-skins 仓库中的 Sentinel Pyke 幻彩皮肤包:Chroma ID 清单、ZIP 包结构与自定义使用指南

本文围绕开源仓库 lol-skins 中的 `skins/Pyke/chromas/Sentinel Pyke/` 目录,系统讲解 Sentinel Pyke(哨兵派克)这款皮肤的 9 个幻彩(Chroma)变体的 ID 清单、对应 ZIP 包的内部结构(`META/info.json` 元数据与 `WAD/Pyke.wad.client` 资源容器)、以及如何基于仓库中已提取好的资源进行查看、解

gitblog_01153的博客 1037

c#中的设计模式

 创建模式1、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory    工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修

masky5310的专栏 410

0.《硬啃设计模式》- 序、目录、下载方法等

无奖竞猜:上联:越看越晕;下联:越晕越看!请问横批是什么?十年前第一次听说它,觉得很神奇,先后投入了N轮的学习时间,每一轮都是越看越晕,越晕就越想看懂它!没错,这就是“设计模式”!我看的第一本设计模式书是《设计模式 可复用面向对象软件的基础》,看得晕来晕去,仅懂一些皮毛,后来让我开始有感觉的是《Head First设计模式》。通过不断地学习,不断地与实际工作联系起来,我在当时的公司准备了“设计模式”的系列课程并为同事们分享,后来我写下了一本电子书《硬啃设计模式》,打算陆续分享给大家,当然你也可以直接下载完整

张传波(网名:Fireball,大大大火球) 3321

C#23种设计模式

1、FACTORY 追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何...

weixin_30446197的博客 74

组合模式(Composite)

一、实验目的: 1) 掌握组合模式(Composite)的特点 2) 分析具体问题,使用组合模式进行设计。 二、实验环境: IDEA 三、实验内容: 文件浏览 文件有不同类型,不同类型的文件其浏览方式有所区别,如文本文件和图片文件的浏览方式就不相同。对文件夹的浏览实际上就是对其中所包含文件的浏览,而客户端可以一致地对文件和文件夹进行操作,无须关心它们的区别。使用组合模式来模拟文...

sinat_40959511的博客 379

GOF 23个基本的设计模式

Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 Adapter:将一个类的接口转换成客户希望的另外一个接口。A d a p t e r模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 Bridge:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 Builder:将一个复...

diefei3662的博客 177

Patterns in SOME –Composite

Code in C#: namespace Composite_DesignPattern{     using System;     using System.Collections;      abstract class Component      {         protected string strName;          pub

SOME 596
上一篇: 设计模式c#语言描述——适配器模式
下一篇: 设计模式c#描述——装饰(Decorator)模式
mutou23
博客等级 码龄24年 3粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值