请求发送者(调用者)与请求接收者之间,隔着一个命令,这就是命令模式。
为什么要在中间搞一个命令对象作为中介?
请求发送者直接调用接收者不行吗?如果为方便替换,符合开闭原则,可以针对接口编程,弄一个请求接收者接口,具体的接收者实现这个接口就可以了。
究其原因,我猜是这样,先有请求发送者与请求接收者,现在需要将二者联系起来,又不好修改,因此在中间搞一个统一接口的命令对象。
因此,命令对象实质是适配器。
另外,命令对象里面一个个命令,对外可能很简单,但里面的代码,可能是具体接收者的方法的一系列调用,甚至是多个具体接收者的一系列调用,那么这又有了建造者模式的味道。
因此,命令模式是适配器模式+ 建造者模式的混合体。
============================================
另一种解释是,之所以在调用者和接收者之间增加一个命令模式,就是不想让调用者和接收者之间直接发生关系,就是解耦:将发送者的请求封装在命令对象中,再通过命令对象来调用接收者的方法。