设计模式(十三):组合模式
一、定义
将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
二、实例:总店—加盟店
总店和加盟店实行的会员制度一样,但是总店和加盟店又是一个层级关系。这样的关系使得形成了一张树状图。
根节点—子节点—叶子
2.1 抽象组合关系
//--------------组合------------------- public abstract class Company { public string ShopID { get; set; } public Company(string shopID) { ShopID = shopID; } public abstract void AddShop(Company shop); public abstract void RemoveShop(Company shop); public abstract void DisplayShops(); }
2.2 定义 节点和叶子
//--------------节点-------------------- public class Headquarters : Company { List<Company> shops = new List<Company>(); public Headquarters(string shopID) : base(shopID) { } public override void AddShop(Company shop) { shops.Add(shop); } public override void RemoveShop(Company shop) { shops.Remove(shop); } public override void DisplayShops() { foreach (var shop in shops) { Console.WriteLine("展示店铺:"+shop.ShopID); } } }
//-------------------叶子--------------------------- public class Shop : Company { public Shop(string shopid) : base(shopid) { } public override void AddShop(Company shop) { Console.WriteLine("暂无下级"); } public override void DisplayShops() { throw new NotImplementedException(); } public override void RemoveShop(Company shop) { Console.WriteLine("暂无下级"); } }
2.3 客户端
//---------------------组合模式------------------------ Component.Company baseShop = new Component.Headquarters("华北区"); baseShop.AddShop(baseShop); Component.Company shop_1 = new Component.Shop("加盟店:NO.1"); baseShop.AddShop(shop_1); Component.Company shop_2 = new Component.Shop("加盟店:NO.2"); baseShop.AddShop(shop_2); baseShop.DisplayShops(); Console.ReadKey();
结果:
三、总结
需求中有部分和整体的关系,并且部分和整体的表达近乎一致。就可考虑使用组合模式。
更多精彩原创心得,请关注微信公众号: 梯形

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?