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设计模式了.

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

}

posted @ 2010-12-12 22:05  规定  阅读(266)  评论(0编辑  收藏  举报