C# 设计模式(9)组合模式

组合模式

1. 运用递归

2. 组合模式:分透明和安全

代码实现:

项目提成

namespace CompositePattern
{
    public abstract class AbstractDomain
    {
        public string Name { get; set; }
        public int Percent { get; set; }
        public abstract void Commission(double money);
    }
    class Domain:AbstractDomain
    {
        List<Domain> domainChildList = new List<Domain>();

        public void AddChild(Domain domainChild)
        {
            this.domainChildList.Add(domainChild);
        }

        public override void Commission(double money)
        {
            double ret = money * this.Percent / 100;
            Console.WriteLine($"{this.Name} can get {ret} RMB");

            foreach (var domainChild in domainChildList)
            {
                domainChild.Commission(ret);
            }
        }
    }
}

代码调用:

    class Program
    {
        static void Main(string[] args)
        {
            double totalMoney = 1000000;
            var domains = BuildTree();
            domains.Commission(totalMoney);
        }

        private static Domain BuildTree()
        {

            Domain domain = new Domain()
            {
                Name = "能有的提成收入",
                Percent = 10
            };

            #region
            Domain domain1 = new Domain()
            {
                Name = "CEO",
                Percent = 30
            };
            Domain domain2 = new Domain()
            {
                Name = "各部门共有",
                Percent = 70
            };

            Domain domain21 = new Domain()
            {
                Name = "实施",
                Percent = 20
            };
            Domain domain22 = new Domain()
            {
                Name = "测试",
                Percent = 10
            };
            Domain domain23 = new Domain()
            {
                Name = "销售",
                Percent = 30
            };
            Domain domain24 = new Domain()
            {
                Name = "开发",
                Percent = 40
            };
            Domain domain241 = new Domain()
            {
                Name = "经理",
                Percent = 20
            };
            Domain domain242 = new Domain()
            {
                Name = "主管",
                Percent = 15
            };
            Domain domain243 = new Domain()
            {
                Name = "开发团队",
                Percent = 65
            };
            Domain domain2431 = new Domain()
            {
                Name = "项目组1",
                Percent = 50
            };
            Domain domain2432 = new Domain()
            {
                Name = "项目组2",
                Percent = 50
            };
            Domain domain24321 = new Domain()
            {
                Name = "项目经理",
                Percent = 20
            };
            Domain domain24322 = new Domain()
            {
                Name = "开发人员",
                Percent = 80
            };
            Domain domain243221 = new Domain()
            {
                Name = "高级开发人员",
                Percent = 40
            };
            Domain domain243222 = new Domain()
            {
                Name = "中级开发人员",
                Percent = 30
            };
            Domain domain243223 = new Domain()
            {
                Name = "初级开发人员",
                Percent = 20
            };
            Domain domain243224 = new Domain()
            {
                Name = "实习生",
                Percent = 10
            };
            Domain domain2432241 = new Domain()
            {
                Name = "实习生1",
                Percent = 25
            };
            Domain domain2432242 = new Domain()
            {
                Name = "实习生2",
                Percent = 25
            };
            Domain domain2432243 = new Domain()
            {
                Name = "实习生3",
                Percent = 25
            };
            Domain domain2432244 = new Domain()
            {
                Name = "实习生4",
                Percent = 25
            };
            domain243224.AddChild(domain2432241);
            domain243224.AddChild(domain2432242);
            domain243224.AddChild(domain2432243);
            domain243224.AddChild(domain2432244);

            domain24322.AddChild(domain243221);
            domain24322.AddChild(domain243222);
            domain24322.AddChild(domain243223);
            domain24322.AddChild(domain243224);

            domain2432.AddChild(domain24321);
            domain2432.AddChild(domain24322);

            domain243.AddChild(domain2431);
            domain243.AddChild(domain2432);

            domain24.AddChild(domain241);
            domain24.AddChild(domain242);
            domain24.AddChild(domain243);

            domain2.AddChild(domain21);
            domain2.AddChild(domain22);
            domain2.AddChild(domain23);
            domain2.AddChild(domain24);

            domain.AddChild(domain1);
            domain.AddChild(domain2);
            #endregion

            return domain;
        }
    }

结果:

原文地址:https://www.cnblogs.com/YourDirection/p/14073685.html