组合模式
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;
}
}
结果:
