设计模式-》组合模式

例子

透明组合

  • 部门 -》公司,部门,部门小组,员工
public abstract class AbsComponent { protected string Name { get; } protected NodeType NodeType { get; } protected AbsComponent(string name, NodeType nodeType) { Name = name; NodeType = nodeType; } public abstract void Add(AbsComponent productComponent); public abstract void Remove(AbsComponent productComponent); public abstract void Display(int depth); } public abstract class Composite : AbsComponent { protected List<AbsComponent> Components { get; } public Composite(string name, NodeType nodeType) : base(name, nodeType) { Components = new List<AbsComponent>(); } public override void Add(AbsComponent productComponent) { Components.Add(productComponent); } public override void Remove(AbsComponent productComponent) { Components.Remove(productComponent); } public override void Display(int depth) { for (int i = 0; i < depth; i++) { Console.Write("----"); } Console.WriteLine(Name); foreach (var component in Components) { component.Display(depth + 1); } } } public class DepartmentComposite : Composite { public DepartmentComposite(string name) : base(name, NodeType.Department) { } } public class GroupComposite : Composite { public GroupComposite(string name) : base(name, NodeType.Group) { } } public class RootComposite : Composite { public RootComposite(string name) : base(name, NodeType.Root) { } } public enum NodeType { Root = 0, Department = 1, Group = 2, Person = 3 } public class Person : AbsComponent { public Person(string name) : base(name,NodeType.Person) { } public override void Add(AbsComponent productComponent) { throw new NotImplementedException(); } public override void Remove(AbsComponent productComponent) { throw new NotImplementedException(); } public override void Display(int depth) { for (int i = 0; i < depth; i++) { Console.Write("----"); } Console.WriteLine(Name); } } static void Main(string[] args) { var root = new RootComposite("总公司"); var developmentDepartment = new DepartmentComposite("开发部"); var renshiDepartment = new DepartmentComposite("人事"); var chanpingDepartment = new DepartmentComposite("产品"); root.Add(developmentDepartment); root.Add(renshiDepartment); root.Add(chanpingDepartment); var aRenshiDepartment = new GroupComposite("人事一组"); renshiDepartment.Add(aRenshiDepartment); developmentDepartment.Add(new Person("cxl")); developmentDepartment.Add(new Person("cxl2")); aRenshiDepartment.Add(new Person("牛逼")); root.Display(0); }


__EOF__

本文作者icxldd
本文链接https://www.cnblogs.com/icxldd/p/15799654.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   icxl  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示