首页 > 代码库 > 23种设计模式--组合模式

23种设计模式--组合模式

一、组合模式的介绍

        组合我们第一下想到的肯定是由部分到整体,没错确实就是这样,我的理解就是整体与部分的层次关系,且在关系中的所有对象都有相同的操作;这个来试用场景大家或许更明白文件夹的操作,组织架构等等,反正这一类具有层次关系的我们都可以考虑是否使用组合模式。      

二、组合模式的Demo

    public abstract class Position
    {
        public string _name;
        public Position(string name)
        {
            this._name = name;
        }
        //添加职位
       public abstract void AddPosition(Position postion);
        //删除职位
       public abstract void RemovePostion(Position postion);
        //展示职位
       public abstract string DisplayPostion(int depth);

    }

    //管理
    class Manger : Position
    {
        private List<Position> manger = new List<Position>();
        public Manger(string name) : base(name)
        {
        }

        public override void AddPosition(Position postion)
        {
            manger.Add(postion);
        }
        public override void RemovePostion(Position postion)
        {
            manger.Remove(postion);
        }

        public override string DisplayPostion(int depth)
        {
            string dis = "";
            dis += new String(‘-‘, depth) + _name + ‘\n‘;
            foreach(Position p in manger)
            {
                dis += p.DisplayPostion(depth+2);
            }
            Console.WriteLine(dis);
            return dis;
        }
    }

    //职员
    class Employee : Position
    {
        public Employee(string name) : base(name)
        {
        }

        public override void AddPosition(Position postion)
        {
            Console.WriteLine("不能添加下属职位");
        }

        public override void RemovePostion(Position postion)
        {
            Console.WriteLine("不能移除下属职位");
        }


        public override string DisplayPostion(int depth)
        {
            string dis = "";
            dis += new String(‘-‘, depth) + _name + "\n";
            Console.WriteLine(dis);
            return dis;
        }
    }

        class Program
    {
        static void Main(string[] args)
        {
            Manger manager = new Manger("经理");
            manager.AddPosition(new Employee("经理助理"));
            manager.AddPosition(new Employee("经理秘书"));

            Manger derp = new Manger("技术经理");
            derp.AddPosition(new Employee("程序员"));

            manager.AddPosition(derp);

            manager.DisplayPostion(1);
            Console.ReadKey();


        }
    }

三、设计模式源码下载

       GitHub:https://github.com/wangtongzhou520/Designpattern

       

      

23种设计模式--组合模式