组合模式

以OA人员管理为例:

  • UML图:

  • 代码实现:
 public abstract class BasePeople
    {
        protected string Name { set; get; }

        public BasePeople(string name)
        {
            this.Name = name;
        }

        /// <summary>
        /// 添加下属员工
        /// 1、透明模式下,可以使用该方法
        /// 2、安全模式下,不需要使用这个方法,因为对于最低层级实现该方法是没有意义的
        /// </summary>
        /// <param name="people"></param>
        public abstract void AddChild(BasePeople people);

        /// <summary>
        /// 自我介绍
        /// </summary>
        public abstract void SelfIntroduction();
    }
  public class Manager : BasePeople
    {
        public List<BasePeople> childrenList = new List<BasePeople>();
        public Manager(string name) : base(name)
        {

        }

        public override void AddChild(BasePeople people)
        {
            childrenList.Add(people);
        }

        public override void SelfIntroduction()
        {
            Console.WriteLine($"我是一个经理,我的名字叫{base.Name},我下面有{childrenList.Count}个员工");
        }
    }

 public class Staff : BasePeople
    {
        public Staff(string name) : base(name)
        {

        }

        public override void AddChild(BasePeople people)
        {
            Console.WriteLine($"我的底层员工,没有资格有下属");
            throw new NotImplementedException();
        }

        public override void SelfIntroduction()
        {
            Console.WriteLine($"我是一个普通员工,我的名字叫{base.Name}");
        }
    }

 

  • 调用端代码:
 class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("*********************添加员工前*************************");
            BasePeople manager = new Manager("马云");
            manager.SelfIntroduction();

            BasePeople staff1 = new Staff("Jim");
            staff1.SelfIntroduction();

            BasePeople staff2 = new Staff("LiLei");
            staff2.SelfIntroduction();

            BasePeople staff3 = new Staff("HanMeimei");
            staff3.SelfIntroduction();

            Console.WriteLine("*********************添加员工后*************************");
            manager.AddChild(staff1);
            manager.AddChild(staff2);
            manager.AddChild(staff3);
            manager.SelfIntroduction();

            Console.ReadLine();
        }
    }
  • 运行效果:

  • 总结

组合模式,将对象组合成树形结构以表示'部分-整体'的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

代码下载地址:https://pan.baidu.com/s/1F6GYLy5EvRhvUa9yQhLIgA    krgk

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值