Administrator
发布于 2024-08-02 / 25 阅读
0
0

组合模式

背景描述

一个公司存在子公司,以及职能部门。用组合模式来实现公司的组织。

代码实现

Company类

    public abstract class Company
    {
        protected string mName;
        public Company(string name)
        {
            mName = name;
        }

        public abstract void Add(Company c);
        public abstract void Remove(Company c);
        public abstract void Display(int depth);
    }

具体Company类

public class  ConcreteCompany: Company
{
    private List<Company>ChildrenList = new List<Company>();
    public ConcreteCompany(string name) : base(name) { }
    public override void Add(Company c) {
        ChildrenList.Add(c);
    }

    public override void Remove(Company c) {
        ChildrenList.Remove(c);
    }

    public override void Display(int depth) {
        Console.WriteLine(new string('-', depth) + mName);
        foreach (var component in ChildrenList)
        {
            component.Display(depth + 2);
        }
    }
}

最底层Company类

    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) + mName);
        }
    }

Main方法

    internal class Program
    {
        static void Main(string[] args)
        {
            ConcreteCompany root = new ConcreteCompany("北京总公司");
            root.Add(new FinanceDepartment("总公司财务部"));

            ConcreteCompany comp1 = new ConcreteCompany("上海华东分公司");
            comp1.Add(new FinanceDepartment("华东分公司财务部"));
            root.Add(comp1);

            ConcreteCompany comp2 = new ConcreteCompany("南京办事处");
            comp2.Add(new FinanceDepartment("南京办事处财务部"));
            root.Add(comp2);

            root.Display(1);
        }
    }

执行结果:

-北京总公司
---总公司财务部
---上海华东分公司
-----华东分公司财务部
---南京办事处
-----南京办事处财务部

UML图


评论