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.那最起码让我有机会找到执行的地方.
        // 派生维护难的问题一直困扰着我,如无必要不派生.

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

  • 相关阅读:
    DataContext.ExecuteQuery的两种方法调用
    记一次电脑被清空的感受
    JAVA学习<二>
    JAVA学习记录<一>
    iOS服务器数据请求"汉字编码"问题
    iOS上传图片问题
    iOS类型的转换
    iOS限制输入解决方法
    iOS10权限问题
    JS进阶学习<一>
  • 原文地址:https://www.cnblogs.com/ww960122/p/2103140.html
Copyright © 2011-2022 走看看