码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-10-26 11:21:02      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:https   man   设计模式源码   string   程序员   秘书   文件夹   remove   name   

一、组合模式的介绍

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

二、组合模式的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种设计模式--组合模式

标签:https   man   设计模式源码   string   程序员   秘书   文件夹   remove   name   

原文地址:http://www.cnblogs.com/wtzbk/p/5999577.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!