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 命令管理(); 命令管理.接到命令(电磁干扰命令); 命令管理.接到命令(摧毁机场命令); 命令管理.处理命令();
在这里,你可以先执行电磁干扰,再执行摧毁机场。也可以先执行摧毁机场,再执行电磁干扰,或者我只执行其中一个,调用方的组装特别方便。
上一篇 设计模式之-门店模式
发表评论
匿名
用户评论
暂无评论