设计模式—命令模式补充
设计模式—命令模式补充
上一篇文章中大家应该已经看到了在命令模式中将函数提高到类层面的原因和所带来的好处,但可能电视的例子很难解释我说的2种情况:一是下命令者可能到不了“行为实现者”跟前,另一个就是在“行为实现者”执行的时候命令者可能已经不存在了。给读者带来了很多疑惑,为了帮助大家理解这2种情况,我找了半天终于找到诸葛亮杀魏延的例子,应该可以很形象的说明问题。
诸葛亮下达了2个命令,一是让马岱埋伏在魏延周围,听到xxx就杀魏延,另一个就是让杨仪诱导魏延,让其说出xxx。懒得画类图,我给出个样例代码
public class 诸葛亮
{
//发出命令
}
public interface 命令
{
void Execute();
}
public class 杨仪:命令
{
public void Execute()
{
//诱骗魏延
}
}
public class 马岱:命令
{
public void Execute()
{
//杀死魏延
}
}
大家可以看到,这就是标准命令模式的应用,诸葛亮的目的就是要杀魏延,为什么诸葛亮不直接去把魏延杀掉呢?大家都知道杀魏延是诸葛亮死后,也就是说诸葛亮这个时候根本就到不了魏延跟前,或者说杀魏延的时候,命令下达者(诸葛亮)已经不存在了。所以这个时候我们不得不抽象出命令,让命令发起者和命令执行者不在同一个类里面,他们可以单独变化,虽然诸葛亮挂了,但不影响命令的执行。——用另一种方式来理解就是:诸葛亮只对杀魏延有兴趣,但是为了死后能杀魏延,诸葛亮不得不先借助杨仪和马岱。