最新要闻
- 汽车大灯清洗功能有用吗_汽车大灯清洗功能什么作用
- 每日关注!韩系车中国市场遇冷!悦达起亚被曝管理岗轮休 一休就一年
- 理想L8成中保研碰撞史最佳SUV:“堡垒车身”功不可没_世界速递
- TCL发布Mini LED电视Q10H:疯狂3000尼特亮度 98寸售价29999元
- 贵南县气象台发布暴雪蓝色预警信号【2023-05-09】|天天观察
- 越南央行可能会在银行挤兑现象中尽早采取行动。
- 播报:机械盘真的没人买了 HDD出货量再次暴跌:价格神奇上涨
- SSD价格见底了!再下降后果危险:闪存厂商要破产 世界热讯
- 环球观天下!海洋气息渐浓 新款比亚迪宋PLUS DM-i申报: 装上海豹同款大灯
- 真的在做了!任天堂官方回应新一代Switch消息:细节无可奉告_全球新要闻
- 首发4999元 KTC新款电竞显示器上架:2K OLED高刷屏 四轴调色|每日热讯
- 全球今日讯!祥鑫科技:5月8日接受机构调研,信达证券、华安基金等多家机构参与
- 天天日报丨谷爱凌:90%网络传言都是假的 不会为负面评价难过
- 午睡过久会长胖吗?研究发现:午睡时长影响健康 30分钟是关键点-全球最新
- 曾被称为格力接班人!格力直播间孟羽童视频被删除 天天动态
- 淄博90后女店主2个月瘦了10斤:1天烤鸡腿上千个 世界快讯
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
看热讯:C#设计模式09——组合模式的写法
1. 什么是C#组合模式?
组合模式是一种结构型设计模式,它允许将对象组合成树形结构以表示“整体/部分”层次结构。使用此模式,客户端可以按相同的方式处理单个对象和对象集合,而不必关注它们是单个对象还是组合对象。组合对象本身也可以作为容器,包含其他组合对象,形成更复杂的树形结构。
(资料图)
在C#中,组合模式是一种递归嵌套的设计模式,通常需要使用抽象类或接口表示“整体”和“部分”之间的关系,并将部件对象存储在它们的容器中。通过通过将容器中的部件继续使用相同的方式处理,客户端代码可以逐级访问嵌套对象,而不必知道每个对象的具体类型或是否是叶子节点。
2. 为什么要使用C#组合模式?
组合模式可以方便地处理层次结构,例如组织机构、文件系统或UI控件。使用该模式,可以将树形数据结构的遍历变得简单且具有一致性,而无论遍历哪个节点,只需按照相同的方式进行。
使用组合模式还可以使代码更加灵活。由于容器和叶子节点可以互换使用,可以轻松地添加新的叶子节点和容器对象,而不会影响其它部分代码的实现。
3. 组合模式的主要角色有哪些?
C#组合模式通常涉及四个主要角色:
- 抽象组件(Component): 定义组合关系的抽象类或接口,为容器和叶子节点共享的操作提供通用的实现。- 叶子节点(Leaf): 组合树结构中的最底层元素,它们没有子节点,具有特定的行为。- 容器(Composite): 包含一组子节点并维护它们之间的组合结构。容器可以包含其他容器和叶子节点,统一对子节点操作。- 客户端(Client): 使用组合结构的代码,通常通过容器操作组合节点,而不必关注如何管理节点之间的组合关系,将复杂度降到最低。
4. 组合模式如何实现?
组合模式的一个常见实现方案是将组件抽象成接口或抽象类。这个抽象类包含容器和叶子节点的通用行为和属性,并定义了添加、删除和获取子节点的方法。容器实现这个抽象类,并维护它们的子节点,而叶子节点扩展它们自己的逻辑。
通常情况下,容器会将它自己的操作通过递归调用委托给子节点,从而在深层次的嵌套结构中完成某个指定操作。客户端代码使用这个抽象接口或类,而不是具体的实现对象,实现了透明的管理树形结构元素。
5. 组合模式有哪些优缺点?
优点:
- 可以方便地处理树状结构,具有一致性和可维护性。- 组合对象可以递归嵌套,允许动态的添加和删除节点和树形结构。- 通过共享相同接口或抽象类,客户端代码可以无缝切换一个元素与多个元素之间的关系,从而简化代码逻辑。- 允许在叶子和组合对象中分别添加新的行为和操作,而不会影响其它部分的代码。
缺点:
- 可能难以限制容器中的元素类型,会产生一定的安全隐患。- 由于递归嵌套,可能对内存和性能有一定的影响。- 当组合对象拥有大量子节点时,可能会对代码可读性和理解性造成一定的困难。
以下是一个使用C#组合模式的示例代码:
//抽象组件public abstract class Component{ protected string Name; public Component(string name) { Name = name; } public abstract void Add(Component c); public abstract void Remove(Component c); public abstract void Display(int depth);}//叶子节点public class Leaf : Component{ public Leaf(string name) : base(name) { } public override void Add(Component c) { Console.WriteLine("Cannot add to a leaf"); } public override void Remove(Component c) { Console.WriteLine("Cannot remove from a leaf"); } public override void Display(int depth) { Console.WriteLine(new string("-", depth) + Name); }}//容器public class Composite : Component{ private List _children = new List(); public Composite(string name) : base(name) { } public override void Add(Component c) { _children.Add(c); } public override void Remove(Component c) { _children.Remove(c); } public override void Display(int depth) { Console.WriteLine(new string("-", depth) + Name); foreach (Component component in _children) { component.Display(depth + 2); } }}//客户端class Client{ static void Main(string[] args) { Composite root = new Composite("root"); root.Add(new Leaf("Leaf A")); root.Add(new Composite("Composite X")); Composite compositeY = new Composite("Composite Y"); compositeY.Add(new Leaf("Leaf B")); compositeY.Add(new Leaf("Leaf C")); root.Add(compositeY); Leaf leafD = new Leaf("Leaf D"); root.Add(leafD); root.Remove(leafD); root.Display(1); Console.ReadKey(); }}
在上述代码中,抽象组件是Component类,其中包含添加、删除和展示子节点等公共方法。叶子节点Leaf和容器Composite分别继承了Component,并实现了它们自己的逻辑。客户端使用抽象组件Component来透明地处理叶子节点和容器对象,并对它们进行操作。在Main方法中,创建了一个根容器对象,并添加了一些叶子节点和容器对象。输出结果是一个树形结构。
-root--Leaf A--Composite X--Composite Y---Leaf B---Leaf C
其中,输出的内容是按照树形结构展示的,每行前面添加了一些连字符("-")来表示层次结构深度。可以看到,root节点包含了三个子节点,其中compositeY节点又包含了两个子节点。最后,“Leaf D”节点被移除了。
关键词:
看热讯:C#设计模式09——组合模式的写法
R数据分析:生存数据预测模型的建立和评价(二)timeROC与决策曲线
汽车大灯清洗功能有用吗_汽车大灯清洗功能什么作用
诺贝尔经济学奖得主称美国可能债务违约
每日关注!韩系车中国市场遇冷!悦达起亚被曝管理岗轮休 一休就一年
理想L8成中保研碰撞史最佳SUV:“堡垒车身”功不可没_世界速递
TCL发布Mini LED电视Q10H:疯狂3000尼特亮度 98寸售价29999元
贵南县气象台发布暴雪蓝色预警信号【2023-05-09】|天天观察
Linux 处理CPU和内存参数的方式总结
越南央行可能会在银行挤兑现象中尽早采取行动。
播报:机械盘真的没人买了 HDD出货量再次暴跌:价格神奇上涨
SSD价格见底了!再下降后果危险:闪存厂商要破产 世界热讯
环球观天下!海洋气息渐浓 新款比亚迪宋PLUS DM-i申报: 装上海豹同款大灯
真的在做了!任天堂官方回应新一代Switch消息:细节无可奉告_全球新要闻
首发4999元 KTC新款电竞显示器上架:2K OLED高刷屏 四轴调色|每日热讯
【开源游戏】Legends-Of-Heroes 基于ET 7.2的双端C#(.net7 + Unity3d)多人在线英雄联盟风格的球球大作战游戏。|全球简讯
世界快看:数据结构与算法大作业:走迷宫程序(C语言,DFS)(代码以及思路)
全球今日讯!祥鑫科技:5月8日接受机构调研,信达证券、华安基金等多家机构参与
天天日报丨谷爱凌:90%网络传言都是假的 不会为负面评价难过
午睡过久会长胖吗?研究发现:午睡时长影响健康 30分钟是关键点-全球最新
曾被称为格力接班人!格力直播间孟羽童视频被删除 天天动态
淄博90后女店主2个月瘦了10斤:1天烤鸡腿上千个 世界快讯
天天热点评!苹果在iPhone 14上挤牙膏!果粉立马用脚投票:好评率跌了
前法鹰主管:当年签镰田大地时他还很年轻,但能力让我想到齐达内
华为云数据库首席专家谈分布式数据应用挑战和发展建议 天天报资讯
如何完整地掌握一个机器学习模型 世界观点
数据结构与算法大作业:走迷宫程序(实验报告)_快资讯
Ubuntu20
你还在纠结怎么选IDE吗?常用IDE工具分享|环球观热点
赛轮轮胎:公司开具的电子商业承兑汇票均已结清|世界速看料
00后男生取名江胡传奇:妈妈姓胡 爸爸喜欢玩《传奇》 每日速读
取代安卓14!OpenHarmony 4.0即将公测:华为鸿蒙4.0“母系统”
世界看点:任天堂开始乱杀!看《塞尔达传说:王国之泪》合法游戏画面也被封
京东APP大升级!12.0上线:应简尽简 营销和弹窗少了_最资讯
1799元 九号平衡车L8奥特曼定制版明日首销:隔壁小孩羡慕哭了
当前速看:金华市东苑小学新生入学网上模拟报名详情2023
SaaS化开源项目之HouseKeeper云上部署实践_每日动态
加要求中方一领事官员离境_中方反制|今日讯
世界视讯!今日欧元/美元汇率行情预测(2023年5月9日)
造车新势力转守为攻!小鹏汽车法务部上线:网络不是法外之地
公司无双休求职者礼貌回拒 HR:想躺平就回老家种地
每日视点!朝日台资深员工游戏氪金过度 年薪1500万仍盗窃公司电脑倒卖
环球今日讯!景区回应功德箱贴收款码:考虑到年轻人很少带现金 与时俱进
乘联会:特斯拉涨价是很好的信号!避免消费者过度期待降价_世界视点
世界快报:广东五华县政府控制的屋顶光伏资源特许经营项目开工
js中的变量 环球速看
JSP_5.8_课堂笔记|世界视点
由浅入深学MySQL之事务全攻略|天天微资讯
微头条丨今天看到博客园的捐款求助,园龄17年6个月的我有些感慨
运营商三要素验证原理,这篇文章就够了!
对话上海国企 | 因科而起、由科而兴、科有所为,上海建科赋能城乡建设新服务
阿坝县气象台发布雷电黄色预警信号【III级/较重】【2023-05-09】 热消息
90元大额券:雪中飞高端含桑蚕丝商务POLO衫49元到手_世界今热点
世界热消息:电脑不怕丢了?鲁大师推出电脑防盗助手:支持定位、丢失锁机
当前报道:中文通用大模型评测基准SuperCLUE发布:讯飞星火认知大模型国内第一 文心一言垫底
《漫长的季节》"爹味"上热搜 部分女性观众:无法共情 全球看热讯
当前视讯!票价20元 全国首条旅游云巴线今日开通:比亚迪100%自主知识产权
精彩看点:广州地铁回应“一夜醒来欠地铁600多万”:乘客及时出站,正查原因
Keycloak 创建和修改自定义用户信息
KubeEdge在边缘计算领域的安全防护及洞察
【吐槽贴】项目经理如何进行高效沟通?_每日消息
【三维CAD软件】上海道宁为您带来国际一流的国产自主可控的三维CAD软件——天工CAD_环球资讯
《边境》之后 中国玩家的国产情怀还能被消费几次?_天天看热讯
周杰伦入职中国移动:工号0716 动感地带至今20年终于“转正”_天天热消息
免费授权歌曲给刘畊宏跳操超大方!周杰伦回应:谈钱伤感情-独家焦点
豆瓣9.4分!《漫长的季节》被吐槽“爹味”浓-当前关注
2023年非京籍四证审核不通过,这些自救方案你一定要提前了解
签名介绍
当前热门:外贸产业集群“掘金”劲头足
峰米激光电视C3来了:ALPD激光显示技术 亮度高达400nit
有望下跌0.33元/升!国内油价下周二晚将迎来调整
当前快报:史上最小发光二极管面世:可让手机摄像头秒变全息显微镜
广东省2023年高校招生平行志愿投档及录取实施办法
SpringBoot的@Configuration注解
安装nginx--银河麒麟V10Kylin Linux
C#自定义异常就这么简单
网关神器traefik的,etcd和https配置例子
一行代码搞定 font-size 响应式
痛别!百岁抗日英雄张友仁逝世
环球热文:比亚迪老对手发威!哈弗枭龙系列上市定档:四驱体验两驱价格
5月上映!迪士尼《小美人鱼》世界首映礼:黑小美人鱼主演亮相
小米稳居中国电视市场第一 国外品牌份额合计不到5%_今日讯
付费会员该在截止日当天几点过期?法院判了
三星、谷歌联手优化:Android 14要彻底告别杀后台了
当前资讯!北斗西虹桥基地:积极打造具有全球影响力的产业集聚高地
快看:品类超全的免费 API 大全整理
五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)
开源.NetCore通用工具库Xmtool使用连载 - 散列算法篇|世界视点
Centos7安装MySQL详细步骤(配置开机自启)|天天关注
“五一”假期后机票价格大幅回落 端午出游开始发力 环球热资讯
诺基亚账户怎么注册?诺基亚账户忘记了怎么找回?
【世界独家】入口软糯爽滑 冻颜密码燕窝椰汁3.1元清仓
天天简讯:五一成绩单出炉!河南成为最大赢家
《巨齿鲨2》新海报出炉:吴京、斯坦森直面深海巨鲨 超霸气
上海展会外国人插队领冰淇淋被拒 网友:宝马MINI脸红吗
全球最资讯丨电动“吉姆尼”背个“大手表”!五菱宝骏悦也5月25日上市
怎么将MP4格式转换成RM格式?rm格式用什么播放器打开?
3dmark11怎么看通过率?3dmark11注册码有哪些?
华为p30上市时间和价格是什么?华为p30怎么升级鸿蒙系统3.0?
联想Thinkpad x200什么时候上市的?联想Thinkpad x200电脑参数