zoukankan      html  css  js  c++  java
  • 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;
            }
        }
    

    结果:

  • 相关阅读:
    我的书单
    说说IUnitOfWork~Linq to Sql与EntityFrameworks中的SubmtChanges()发生了什么事
    说说IUnitOfWork~认识IUnitOfWork,为什么要出现IUnitOfWork接口
    LINQtoSQL那点事~关于延时加载的性能,微软给出了不错的解决方案
    数据结构~站点地图其实是一颗树
    说说IUnitOfWork~方法完整性与统一提交不冲突
    递归 解剖
    Java Socket一对一聊天
    转:浅谈c++容器
    Java JList 使用
  • 原文地址:https://www.cnblogs.com/YourDirection/p/14073685.html
Copyright © 2011-2022 走看看