C#复合模式(Composite Pattern)实例教程

 更新时间:2014年09月12日 16:40:31   投稿:shichen2014  
这篇文章主要介绍了C#复合模式(Composite Pattern),以实例形式讲述了复合模式在树形结构中的应用,需要的朋友可以参考下

本文以一个简单实例的形式讲述了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#程序设计的学习有所帮助。

相关文章

  • 解析StreamReader与文件乱码问题的解决方法

    解析StreamReader与文件乱码问题的解决方法

    本篇文章是对StreamReader与文件乱码问题的解决方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C#实现12306自动登录的方法

    C#实现12306自动登录的方法

    本文介绍了C#实现12306自动登录的方法,主要方法是捕获参数和url并补充参数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-07-07
  • C#与C++与互操作实例讲解

    C#与C++与互操作实例讲解

    在本篇文章里小编给大家整理了关于C#与C++与互操作实例以及相关内容,需要的朋友们可以学习下。
    2019-08-08
  • C#多线程TPL常见操作误区与异常处理

    C#多线程TPL常见操作误区与异常处理

    本文详细讲解了C#多线程TPL常见操作误区与异常处理,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • C# winform操作CSV格式文件

    C# winform操作CSV格式文件

    这篇文章主要为大家详细介绍了C#在winform中的表格操作CSV格式文件的相关实例,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下
    2025-03-03
  • Unity实现QQ列表折叠菜单

    Unity实现QQ列表折叠菜单

    这篇文章主要为大家详细介绍了Unity实现QQ列表折叠菜单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C#使用Consul集群进行服务注册与发现

    C#使用Consul集群进行服务注册与发现

    这篇文章主要介绍了C#使用Consul集群进行服务注册与发现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览实例

    基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览实例

    这篇文章主要介绍了基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览的方法,以实例形式详细分析了WebClient模拟POST与GET登陆与浏览的过程,对于C#项目开发来说具有不错的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • C# 动态加载程序集信息

    C# 动态加载程序集信息

    在设计模式的策略模式中,需要动态加载程序集信息,本文通过一个简单的实例,来讲解动态加载Dll需要的知识点。下面跟着小编一起来看下吧
    2017-03-03
  • c#爬虫爬取京东的商品信息

    c#爬虫爬取京东的商品信息

    这篇文章主要给大家介绍了关于利用c#爬虫爬取京东商品信息的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们随着小编来一起学习学习吧
    2018-11-11

最新评论