介绍
组合模式 是一种用来方便操作整体和局部对象的模式,
比如: 你的老板是周扒皮
- 周扒皮对部门中小王 进行 降薪 操作, 操作对象是小王,
- 周扒皮也可以对整个不能进行降薪操作, 操作对象是部门
部门就是多个小王的组合, 对于老板来说他不关心部门和小王的区别, 他只要这个操作对象支持降薪就可以了, 而组合模式就是屏蔽这个整体和局部区别使得调用者 方便操作的设计模式
命令模式分为发令者和执行者两个部分, 是一种把复杂操作封装到命令对象中有执行者执行的设计模式, 发令者可以不用关系执行的细节
比如: 餐馆 服务员接单后 下发给后厨的初始操作的场景
- 先分配好每个厨师做特定的菜, A 厨师做辣子鸡,并且每个步骤计划好. B 厨师做鱼香肉丝
- 服务员收到辣子鸡的单后, 来到后厨都A厨师下发指令, A厨师就按照计划好的开始做菜
当前代码的场景和显示有点区别. 现实中厨师已经自己知道辣子鸡的做法, 服务员只要告诉厨师 辣子鸡 三个字就可以.
但是代码中, 需要 " 辣子鸡" 命令对象中需要封装好辣子鸡的操作方法, 这样厨师对象收到命令后 直接按照命令中的只是操作就可以了,
将操作方法和命令封装到一起的好处是: 可以很方便的扩展和修改命令对象而不用改变服务员对象和 厨师对象, 需要将执行者的引用也放入命令对象中,
两个模式结合
命令模式中 经常会有很多的命令需要一起发送给执行者操作, 如果使用组合模式 将多个命令组合成一个, 这样就可以不用多个命令传递了.
使用场景
在界面UI开发的场景中, 经常会用到这两个模式, 当点击一个按钮的时候, 界面系统会生成一个命令, 并传递给底层的逻辑系统执行
思考
命令模式 是把不同的复杂逻辑封装到不同的命令对象中, 发令者 和 执行者 之间通过命令对象交互, 对于业务逻辑的修改 只用修改命令对象就可以, 不用修改调发令者和执行者. 并且命令对象也很容易扩展.
但是 对于命令对象的封装要求比较高, 使用组合模式也可以很方便的 组合复杂命令