zoukankan      html  css  js  c++  java
  • C#委托本质探索 八、引入策略模式

    // 引入策略模式,将工作划分开来
    // 应用依赖注入,让"执行工作"由注入的实例来完成具体内容.
    // 这样,新增的工作独立完成,哪里使用哪里修改
    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace ConsoleApplication1.EighthTest
    {
        class EighthTest
        {
            public void DoTest()
            {
                员工 小薇 = new 员工();

                小薇.工作 = new 运营魔兽世界();
                小薇.执行工作();
                Console.ReadLine();

                小薇.工作 = new 处理业内竞争();
                小薇.执行工作();
            }
        }

        class 员工
        {
            public 工作策略 工作;

            public void 执行工作()
            {
                Console.WriteLine(工作.执行());
            }

        }

        interface 工作策略
        {
            string 执行();
        }

        class 运营魔兽世界 : 工作策略
        {
            string ConsoleApplication1.EighthTest.工作策略.执行()
            {
                StringBuilder 工作内容 = new StringBuilder();
                工作内容.AppendLine("安排设备采购");
                工作内容.AppendLine("招募客服,上岗培训");
                工作内容.AppendLine("广告宣传");
                工作内容.AppendLine("游戏上市");
                工作内容.AppendLine("推出活动");
                工作内容.AppendLine("…………");
                return 工作内容.ToString();
            }
        }

        class 处理业内竞争 : 工作策略
        {
            string ConsoleApplication1.EighthTest.工作策略.执行()
            {
               
                StringBuilder 工作内容 = new StringBuilder();
                工作内容.AppendLine("调查竞争对手");
                工作内容.AppendLine("展开斗争");
                return 工作内容.ToString();
            }
        }

        // 这个设计做出来似乎很高明,但曾经发生的一件事导致我多年来一直厌恶派生的东西.
        // 一次去现场,给别人开发的项目做维护,发现程序中出现错误,需要修改.
        // 触发错误的表现很简单,点一个按钮报错.我就从这个按钮的Click事件中向下查找.
        // 以这个例子来说,在测试代码中右击"小薇.工作",选择转到定义,根本跳转不到真正执行的地方.
        // 那个程序别人几乎无法维护,简单的一个窗体,却附带了几个.cs,一个向表中添加记录的操作,
        // 你却怎么也找不到Insert into语句在哪里.
        // 所以,如果用了派生技术,必须要写好设计说明.
        // 不然我宁愿看到很长的if...else.那最起码让我有机会找到执行的地方.
        // 派生维护难的问题一直困扰着我,如无必要不派生.

        // 这里已经看不到委托了,而是衍生出另一种技术-接口.有人把这种应用叫策略,还有人称做服务.
    }

  • 相关阅读:
    链队列的初始化,建立,插入,查找,删除。
    顺序队列的初始化,建立,插入,查找,删除。
    顺序栈的初始化,建立,插入,查找,删除。
    双链表的初始化,建立,插入,查找,删除。
    MT6737 Android N 平台 Audio系统学习----录音到播放录音流程分析
    内核Alsa之pcm
    platform_set_drvdata 和 platform_get_drvdata
    linux 中mmap的用法
    src源dst目标
    复旦软件工程专业课
  • 原文地址:https://www.cnblogs.com/ww960122/p/2103140.html
Copyright © 2011-2022 走看看