C#组合模式实例详解

本文实例讲述了C#组合模式。分享给大家供大家参考。具体如下:

Company.cs如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
  public abstract class Company
  {
    protected string name;
    public Company(string name)
    {
      this.name = name;
    }
    public abstract void Add(Company c);
    public abstract void Remove(Company c);
    public abstract void Display(int depth);
    public abstract void LineOfDuty();
  }
}

ConcreteCompany.cs如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
  public class ConcreteCompany:Company
  {
    private List<Company> children = new List<Company>();
    public ConcreteCompany(string name)
      :base(name)
    {}
    public override void Add(Company c)
    {
      children.Add(c);
    }
    public override void Remove(Company c)
    {
      children.Remove(c);
    }
    public override void Display(int depth)
    {
      Console.WriteLine(new String('-',depth)+name);
      foreach(Company component in children)
      {
        component.Display(depth+2);
      }
    }
    public override void LineOfDuty()
    {
      foreach(Company component in children)
      {
        component.LineOfDuty();
      }
    }
  }
}

FinanceDepartment.cs如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
  public class FinanceDepartment:Company
  {
    public FinanceDepartment(string name) : base(name) { }
    public override void Add(Company c)
    {
    }
    public override void Remove(Company c)
    {

    }
    public override void Display(int depth)
    {
      Console.WriteLine(new String('-',depth)+name);
    }
    public override void LineOfDuty()
    {
      Console.WriteLine("{0} 财务支付管理",name);
    }
  }
}

HRdepartment.cs如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
  public class HRdepartment:Company
  {
    public HRdepartment(string name)
      :base(name)
    { }
    public override void Add(Company c)
    {
    }
    public override void Remove(Company c)
    {
    }
    public override void Display(int depth)
    {
      Console.WriteLine(new String('-',depth)+name);
    }
    public override void LineOfDuty()
    {
      Console.WriteLine("{0} 招聘培训管理",name);
    }
  }
}

Program.cs如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {
      ConcreteCompany root = new ConcreteCompany("北京总共司");
      root.Add(new HRdepartment("人力部"));
      root.Add(new FinanceDepartment("财务部"));
      ConcreteCompany comp = new ConcreteCompany("上海分公司");
      comp.Add(new HRdepartment("分工司人力部"));
      comp.Add(new FinanceDepartment("分公司财务部"));
      root.Add(comp);
      ConcreteCompany comp1 = new ConcreteCompany("南京分部");
      comp1.Add(new HRdepartment("南京人力部"));
      comp1.Add(new FinanceDepartment("南京财务部"));
      comp.Add(comp1);
      ConcreteCompany comp2 = new ConcreteCompany("杭洲分部");
      comp2.Add(new HRdepartment("杭州人事部"));
      comp2.Add(new FinanceDepartment("杭州财务部"));
      comp.Add(comp2);
      root.Display(1);
      Console.ReadKey();
    }
  }
}

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • JavaScript 设计模式之组合模式解析

    怎么说呢?!就像是动物(组合对象)一样,当它生下后代(叶对象)时,它的后代就有了某种功能(比如:挖洞,听力好等等):也像是一棵树,它有一个根(组合对象)然后是从这个棵树向外冒出的其他枝杆(组合对象)以及从这些枝杆又向外长的叶子(叶对象).换句话说,就是当祖先已经有了,那么只要从这个祖先衍生出来的其他孩子(包括这个祖先下的其他组合对象)已经就具备了某种功能,看上去貌似又有些像是继承."组合模式"在组合对象的层次体系中有两种类型的对象:叶对象和组合对象.组合模式擅长于对大批对象进行操作.

  • java设计模式之组合模式(Composite)

    概述 是一种结构型模式,将对象以树形结构组织起来,以表示"部分 - 整体"的层次结构,使得客户端对单个对象和组合对象的使用具有唯一性. UML类图 上面的类图包含的角色: Component:为参加组合的对象声明一个公共的接口,不管是组合还是叶节点. Leaf:在组合中表示叶子结点对象,叶子结点没有子结点. Composite:表示参加组合的有子对象的对象,并给出树枝构建的行为: 代码示例 import java.util.ArrayList; import java.util.Lis

  • C++设计模式之组合模式

    问题描述 上图,是一个公司的组织结构图,总部下面有多个子公司,同时总部也有各个部门,子公司下面有多个部门.如果对这样的公司开发一个OA系统,作为程序员的你,如何设计这个OA系统呢?先不说如何设计实现,接着往下看,看完了下面的内容,再回过头来想怎么设计这样的OA系统. 什么是组合模式? 在GOF的<设计模式:可复用面向对象软件的基础>一书中对组合模式是这样说的:将对象组合成树形结构以表示"部分-整体"的层次结构.组合(Composite)模式使得用户对单个对象和组合对象的使用

  • Java设计模式之组合模式(Composite模式)介绍

    Composite定义:将对象以树形结构组织起来,以达成"部分-整体" 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Composite就应该想到树形结构图.组合体内这些对象都有共同接口,当组合体一个对象的方法被调用执行时,Composite将遍历(Iterator)整个树形结构,寻找同样包含这个方法的对象并实现调用执行.可以用牵一动百来形容. 所以Composite模式使用到Iterator模式,和Chain of Responsi

  • Python的组合模式与责任链模式编程示例

    组合模式 我们把Composite模式看成一个复杂的属性结构,其实基本有三种角色:树干(定义一些操作树叶leaf的操作),树枝(树干上有很多树枝)和树叶(树干想要具体操作的对象) ,Composite模式帮我们实现:即它们在充当对象的时候,还是其他对象的容易,从而提供一致性 python的例子 class Trunk(object): '''树干''' def __str__(self): pass def subtree(self): pass class Composite(Trunk):

  • iOS应用开发中运用设计模式中的组合模式的实例解析

    何为组合模式?     组合模式让我们可以把相同基类型的对象组合到树状结构中,其中父节点包含同类型的子节点.换句话说,这种树状结构形成"部分--整体"的层次结构.什么是"部分--整体"的层次结构呢?它是既包含对象的组合又包含叶节点的单个对象的一种层次结构.每个组合体包含的其他节点,可以是叶节点或者其他组合体.这种关系在这个层次结构中递归重复.因为每个组合或叶节点有相同的基类型,同样的操作可应用于它们中的每一个,而不必在客户端作类型检查.客户端对组合与叶节点进行操作时

  • php设计模式 Composite (组合模式)

    复制代码 代码如下: <?php  /**  * 组合模式  *  * 将对象组合成树形结构以表示"部分-整体"的层次结构,使得客户对单个对象和复合对象的使用具有一致性  */  abstract class MenuComponent  {  public function add($component){} public function remove($component){} public function getName(){} public function getU

  • asp.net 组合模式的一个例子

    复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test { class Program { static void Main(string[] args) { var customer = new Customer { IsActive = true, LateFees = 100M, TotalRentNumber = 10 }

  • c# 组合模式

    结构图: 抽象对象: 复制代码 代码如下: abstract class Component    {        protected string name;        public Component(string name)        {            this.name = name;        }        public abstract void Add(Component c);        public abstract void Remove(Com

  • Android源码学习之组合模式定义及应用

    组合模式定义: Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly. 将对象组合成树形结构以表示"部分-整体"的层次结构,使得用户对单个对象和组合对象的使用具有一致性. 如上图所示(截取自<Head First De

随机推荐