zoukankan      html  css  js  c++  java
  • 设计模式》组合模式

    例子

    透明组合

    • 部门 -》公司,部门,部门小组,员工
        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);
            }
    
    

  • 相关阅读:
    金融风控100道面试题:传统银行开发转行互金top3公司并年薪40多万
    想学好矩阵?首先你要知道矩阵的历史!​
    什么是卷积?
    CNN的卷积核是单层的还是多层的?
    AI换脸之后“AI换声”来了!,一小时诈骗173万!
    介绍两个面试神器
    Github最火!程序员必须知道22大定律和法则
    SQL常用运算符
    SQL利用通配符进行模式查询
    隐藏DataList里面的某一行数据
  • 原文地址:https://www.cnblogs.com/icxldd/p/15799654.html
Copyright © 2011-2022 走看看