命令模式强调的是“封装调用”,即把方法调用封装起来。通过封装方法调用,我们可以把运算块封装成型,所以调用该运算的对象不需要关心事情是如何运行的,他们只需要知道如何使用包装成型的方法来完成它就可以了。通过封装方法调用,我们也可以做一些很聪明的事情,比如记录日志,或者重复使用这些封装来实现撤销。
我们通过下面这个例子 来了解命令模式:我们要设计一个家电自动化遥控器,这个遥控器具有多个可编程的插槽(每个插槽可以指定到一个不同的家电设备),每个插槽都对应一对开关按钮,整个遥控器还具备一个整体的撤销按钮,整体外观如下图所示。
插槽中可以插入多个家用电器的插口:电视、冰箱、电灯、大门等,因此,我们的系统存在两个难点:第一,各个家用电器的使用方法不同,因此提供给它们的接口不尽相同;第二,以后还会有更多的家电加入系统。
这个时候,我们就要用到“命令模式”了。命令模式可以将“动作的请求者”从“动作的执行者”对象中解耦。在上面的例子中,动作的请求者可以是遥控器,而动作的执行者则可以是一种家电代表的类。怎样才能做到“解耦”呢?我们需要利用“命令对象”。利用命令对象,我们可以把命令(例如打开电灯)封装成一个特定的对象(例如客厅电灯对象),所以,如果对每个按钮都存在一个命令对象,那么当按钮被按下的时候,就可以请命令对象做相关的工作。话句话说,使用命令模式,我们能够创建一个API(应用程序编程接口),将这些命令对象加载到按钮插槽,让遥控器的代码尽量保持简单,而把家电自动化的工作和进行该工作的对象一起封装在命令对象中。
未完待续。。。。。。
时间: 2024-12-25 20:43:36