指挥模式和策略模式有什么区别?
差异:
1,命令对象要收集两种信息,一种是方法名,一种是方法参数,参数是通过对象接收器收集的。
指挥模式的基本动机是将程序动作的发起和实际执行解耦,这就好比战场上班长下达命令:机枪掩护(Comnand object 1)和步兵冲锋(Command object 2),但实际如何打机枪,如何对每个步兵冲锋,都属于执行,并不是所有的都由班长规划。不同的士兵会有不同的充电路径,这就是所谓的多态性。命令模式的解耦机制可以是多态的、异步的(动作发起并不意味着立即执行)。
2.strategy不需要收集方法名信息,只调用strategy的一个方法。
策略模式的目的是实现程序行为模板,即一个程序行为中有些动作是确定的,有些动作是不确定的,但是确定的部分和不确定的部分有确定的关系,比如饮料灌装流水线:第一步,准备空瓶;第二步,倒满饮料;第三,密封;第四步,贴商标。
Stragtegy模型揭示了这一步的确定性,但喝什么饮料,贴什么品牌的标签,就留给具体的策略去实现了。因此,它是多态的和同步的。所以通常通过回调函数或者所谓的Sink机制(本质上还是回调函数)来实现。