• C# 组合模式(Component)


    理解:整体与部分的层次关系,且树形关系中的所有对象都有相同的操作

    代码:

    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;

    namespace DesignMode.Component
    {
        //职位
        public abstract class Position
        {
            protected string _name;
            public Position(string name)
            {
                _name = name;
            }

            public abstract void AddUnderPosition(Position post);
            public abstract void RemoveUnderPosition(Position post);
            public abstract string DisplayUnderPosition(int depth);
        }

        //管理职位
        public class Manager : Position
        {
            private IList<Position> subs = new List<Position>();

            public Manager(string name)
                : base(name)
            { }

            public override void AddUnderPosition(Position post)
            {
                subs.Add(post);
            }

            public override void RemoveUnderPosition(Position post)
            {
                subs.Remove(post);
            }

            public override string DisplayUnderPosition(int depth)
            {
                string dis = "";
                dis += new String('-', depth) + _name + "\n";
                foreach (Position p in subs)
                {
                   dis += p.DisplayUnderPosition(depth + 2);
                }
                return dis;
            }
        }

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

            public override void AddUnderPosition(Position post)
            {
                MessageBox.Show("不能添加下属职位");
            }

            public override void RemoveUnderPosition(Position post)
            {
                MessageBox.Show("不能移除下属职位");
            }

            public override string DisplayUnderPosition(int depth)
            {
                string dis = "";
                dis += new String('-', depth) + _name + "\n";
                return dis;
            }
        }

    }

     客户端代码:

            private void btn_Component_Click(object sender, EventArgs e)
            {
                Manager chairman = new Manager("懂事长");
                chairman.AddUnderPosition(new Employee("秘书"));
                chairman.AddUnderPosition(new Employee("助理"));

                Manager buss = new Manager("业务经理");
                buss.AddUnderPosition(new Employee("销售员"));

                Manager tech = new Manager("技术经理");
                tech.AddUnderPosition(new Employee("程序员"));

                chairman.AddUnderPosition(buss);
                chairman.AddUnderPosition(tech);

                string display = chairman.DisplayUnderPosition(1);
                MessageBox.Show(display);  } 
  • 相关阅读:
    记第一次为开源代码报漏洞
    入职第三周——总结前两周学习内容
    入职一星期之感想
    毕业季之礼
    基于mint-ui的移动应用开发案例二(项目搭建)
    基于mint-ui的移动应用开发案例一(简介)
    工作笔记一——杂项
    微信小程序实战小小应用——豆瓣电影
    React学习之坑(二)- 基础入门
    React学习笔记(一)- 环境搭建
  • 原文地址:https://www.cnblogs.com/kavilee/p/2376432.html
Copyright © 2020-2023  润新知