时间:2021-05-20
本文以一个简单实例的形式讲述了C#复合模式。分享给大家供大家参考。具体实现方法如下:
一般在显示树形结构时,复合模式有很好的体现。本文实例显示如下部门结构:
如上图所示,有的节点包含子节点,有的节点不包含子节点。不管是什么节点,每个节点就代表一个部门。
首先设计一个关于部门的抽象基类。
public abstract class DepartmentComponent{ public string Name { private set; get; } public DepartmentComponent(string name) { this.Name = name; } public virtual void PrintSupervisorOf(int spacing) { for (int counter = 0; counter < spacing; counter++) { Console.Write(" "); } Console.WriteLine(Name); }}以上,通过构造函数给属性赋值,通过PrintSupervisorOf(int spacing)方法打印出节点的名称。
接下来设计包含子节点的节点。该类维护着DepartmentComponent类型的集合,提供方法向这个集合中添加节点或从集合中删除节点。
public class DepartmentComposite : DepartmentComponent{ private IList<DepartmentComponent> employees; public DepartmentComposite(string name) : base(name) { employees = new List<DepartmentComponent>(); } public void AddDepartment(DepartmentComponent e) { employees.Add(e); } public void RemoveDepartment(DepartmentComponent e) { employees.Remove(e); } public override void PrintSupervisorOf(int spacing) { base.PrintSupervisorOf(spacing); foreach (DepartmentComponent e in employees) { e.PrintSupervisorOf(spacing + 1); } }}以上 PrintSupervisorOf(int spacing)方法重写了抽象基类的方法,不仅把本节点的名称打印出来,还使用递归把所有子节点的名称显示出来。
最后设计部包含子节点的节点。
public class Department : DepartmentComponent{ public Department(string name) : base(name) { } public override void PrintSupervisorOf(int spacing) { base.PrintSupervisorOf(spacing); }}客户端部分。
class Program{ static void Main(string[] args) { DepartmentComposite salesDepartment1 = new DepartmentComposite("销售部1"); Department zhangsan = new Department("张三"); Department lisi = new Department("李四"); DepartmentComposite salesDepartment2 = new DepartmentComposite("销售部2"); DepartmentComposite specialDepartment = new DepartmentComposite("销售部2特别行动组"); Department wangwu = new Department("王五"); Department zhaoliu = new Department("赵六"); DepartmentComposite salesDepartment = new DepartmentComposite("销售部"); salesDepartment.AddDepartment(salesDepartment1); salesDepartment.AddDepartment(salesDepartment2); salesDepartment1.AddDepartment(zhangsan); salesDepartment1.AddDepartment(lisi); salesDepartment2.AddDepartment(specialDepartment); specialDepartment.AddDepartment(wangwu); specialDepartment.AddDepartment(zhaoliu); salesDepartment.PrintSupervisorOf(0); Console.ReadKey(); }}程序运行结果如下图所示:
希望本文所述对大家C#程序设计的学习有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在BarTender10.1中,支持使用BarTender分隔符模式的复合条形码符号体系包括GS1Composite和GS1DataBar(RSS)。本文小编给
有关淘宝网(电商运营网)店面装修实例教程,我想说的是的是那样的实例教程如今在网络上能够搜到许多,针对初学者来讲根据一些技术专业的实例教程来学习淘宝店面装修是
本文实例讲述了C#画笔使用复合数组绘制单个矩形的方法。分享给大家供大家参考。具体实现方法如下:usingSystem;usingSystem.Collectio
本文实例讲述了C#实现单件模式的三种常用方法。分享给大家供大家参考。具体分析如下:单件模式是一种设计模式,即保持同时只能创建一个实例,下面列出了C#实现单件模式
有关淘宝网店室内装修实例教程,想对你说的是那样的实例教程如今在网络上能够搜到许多,针对初学者来讲根据一些技术专业的实例教程来学习淘宝店面装修是一个十分非常好