2018年12月29日 13:57
原创作品,转载时请务必以超链接形式标明文章原始出处,否则将追究法律责任。

本节我们看一下命令模式,所谓命令模式就是我们一堆可能有联系的方法放在一个类中,然后我们再定义具体的执行类,然后再定义对这些具体执行类的管理类,可以方便的添加命令。试想一下如果有三个命令,侦查,汇报,阻击。那么传统做法就是直接调用类的这三个方法,假如哪天新加了命令,或者调整一下命令的顺序。你这个代码就有的改了,耦合度太高,不灵活。用了命令模式,你可以随意组合任意多种命令。你只需要扩展命令即可,外部调用可随意组装,无需大动代码。

首先我们定义一个接口

public interface 命令
{
    void 执行();
}

定义一个请求类,包含具体的两个请求方法。

public class 请求
{
    public void 摧毁机场()
    {
        Console.Write("摧毁机场");
    }

    public void 电磁干扰()
    {
        Console.WriteLine("发射电磁干扰");
    }
}

接下来我们把上面的两个请求方法给他包装成命令

public class 摧毁机场命令 : 命令
{
    private 请求 请求;
    public 摧毁机场命令(请求 请求)
    {
        this.请求 = 请求;
    }

    public void 执行()
    {
        this.请求.摧毁机场();
    }
}

public class 电磁干扰命令 : 命令
{
    private 请求 请求;
    public 电磁干扰命令(请求 请求)
    {
        this.请求 = 请求;
    }

    public void 执行()
    {
        this.请求.电磁干扰();
    }
}

直接包装成两个具体的命令类,我们再定义一个命令管理类。

public class 命令管理
{
    List<命令> 命令集合 = new List<命令>();
    public void 接到命令(命令 命令)
    {
        命令集合.Add(命令);
    }

    public void 处理命令()
    {
        if (命令集合 == null || !命令集合.Any()) return;

        命令集合.ForEach(命令 => 命令.执行());
        命令集合.Clear();
    }
}

可以看到,你可以接收命令,加入集合,你也可以执行这些命令。

看一下调用

请求 请求 = new 请求();
电磁干扰命令 电磁干扰命令 = new 电磁干扰命令(请求);
摧毁机场命令 摧毁机场命令 = new 摧毁机场命令(请求);

命令管理 命令管理 = new 命令管理();
命令管理.接到命令(电磁干扰命令);
命令管理.接到命令(摧毁机场命令);
命令管理.处理命令();

在这里,你可以先执行电磁干扰,再执行摧毁机场。也可以先执行摧毁机场,再执行电磁干扰,或者我只执行其中一个,调用方的组装特别方便。

发表评论
匿名  
用户评论
暂无评论