- 找出应用中可能需要变化之处,把他们独立出来,不要和哪些不需要变化的代码混在一起;
- 针对接口编程而不是针对实现编程;(针对接口编程,关键在于多态。)
- 有一个可能比是一个更好,多用组合少用继承(使用组合建立系统具有更大的弹性,不仅可以将算法族封装成类,更可以”在运行时动态地改变行为“, 只要组合的行为对象符合正确的接口标准即可。)
- 为了交互对象之间的松耦合设计而努力。
- 找出程序中会变化的方面,然后将其和固定不变的方面相分离。
- 针对接口编程,不针对实现编程。
- 多用组合少用继承。
- 类应该对扩展开放对修改关闭。
命令可以将运算块打包(一个接收者和一组动作),然后将它传来传去,就像是一般的对象一样。即使对象已经被创建很久,运算依然可以被调用。 事实上它可以在不同的线程中被调用。利用这些特性可以做一些应用:日程安排,线程池,工作队列。工作队列和进行计算的对象之间是完全解耦的。
某些应用需要我们将所有的动作都记录在日志中,并能在系统死机之后,重新调用这些动作恢复之前的操作。通过新增两个方法(store(), load()),命令模式就 能够支持这一点。