zoukankan      html  css  js  c++  java
  • C#委托本质探索 六、领导委托下属做某事的正确表示

    // 回归最初的例子
    // 领导委托下属做某事
    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace ConsoleApplication1.SixthTest
    {
        class SixthTest
        {
            public void DoTest()
            {
                领导 朱哥 = new 领导();
                Console.WriteLine("最初朱哥处理任务的执行情况");
                朱哥.处理任务();

                Console.ReadLine();
                下属 小薇 = new 下属(朱哥);
                Console.WriteLine("小薇加入后,朱哥处理任务的执行情况");
                朱哥.处理任务();
            }
        }

        delegate string 委托任务(string 任务内容);

        class 领导
        {
            public 委托任务 领导委托的任务;

            private string 领导自己的任务(string 任务内容)
            {
                if (领导委托的任务 != null)
                    return 领导委托的任务(任务内容);
                else
                    return "没人给干,闲着发呆!";
            }

            public void 处理任务()
            {
                // 时机来临了
                Console.WriteLine(领导自己的任务("运营魔兽世界"));
            }

        }

        class 下属
        {
            public 下属(领导 下属的领导)
            {
                //将自己的工作与领导委托的工作挂钩
                下属的领导.领导委托的任务 += new 委托任务(下属自己的工作);
            }

            private string 下属自己的工作(string 任务内容)
            {
                StringBuilder 工作内容 = new StringBuilder();
                if (任务内容 == "运营魔兽世界")
                {
                    工作内容.AppendLine("安排设备采购");
                    工作内容.AppendLine("招募客服,上岗培训");
                    工作内容.AppendLine("广告宣传");
                    工作内容.AppendLine("游戏上市");
                    工作内容.AppendLine("推出活动");
                    工作内容.AppendLine("…………");
                }
                else if (任务内容 == "处理业内竞争")
                {
                    工作内容.AppendLine("调查竞争对手");
                    工作内容.AppendLine("展开斗争");
                }
                return 工作内容.ToString();
            }

        }

        // 转变成实例的过程还是不顺利,不过最终搞定了.运行测试,好玩,开心!
        // 朱哥没有小薇时他处理"运营魔兽世界"任务的结果是"没人给干,闲着发呆!"
        // 小薇成为朱哥的下属后,接受了朱哥委托的任务,
        // 朱哥再次处理"运营魔兽世界"的任务,结果不再是发呆,工作有人帮着做了.

        // 对比Form上放一个Button的工作原理,Form内部定义了Button的实例button1, Button的事件处理为私有.
        // 下属的构造方法传入领导实例,这样定义是为了把领导实例放在测试代码中,方便测试未绑定事件前的情况.
        // 领导的任务处理公布出来,同样也是为了测试运行情况.
        // 这个例子之所以与Form-Button的形式有差别,仅仅是为了公开Button类的执行情况.

        // 整个过程中朱哥只忙自己的事,期间查看一下自己委托出去的事情.
        // 小薇加入后接过委托的任务,以自己的能力把领导交待下来的事做好了.
        // 从另一个角度讲,虽然说朱哥只忙了自己这一块事,实际上小薇"自己的工作"是由朱哥实际调用的.
        // 观察这一现象,我们可以把朱哥"领导自己的任务"方法理解成为一个监听,
        // 调用委托出去的事情,可以理解成调用了外部某个对象的方法.
        // 说着说着就成了Observer设计模式了.

        // 变量的用法还可以做为函数的参数传递.下个例子进行这方面的研究.

    }

  • 相关阅读:
    多维数组,转化为一维数组多种解决方案
    word-wrap与word-break的区别,以及无效情况
    重温前端基础之-js排序算法
    重温前端基础之-css浮动之怪异现象
    重温前端基础之-css浮动与清除浮动
    重温前端基础之-css盒模型
    C# 应用
    C# 应用
    C# 应用
    C# 应用
  • 原文地址:https://www.cnblogs.com/ww960122/p/1903957.html
Copyright © 2011-2022 走看看