【软考】设计模式-命令模式

来源:互联网 发布:网络蔬菜超市 编辑:程序博客网 时间:2024/06/10 05:24


 

Invoker是下达命令

 

Command是抽象的命令, ConcreteCommand1ConcreteCommand2是具体要实现什么样的命令

 

 ConverteCommand1ConcreteCommand2  Receiver中获得执行命令的具体方法

 

比如:

Invoker发出命令:我要关灯

ConverteCommand1 Receiver中获得关灯的方法,在ConverteCommand1 实现Receiver中的关灯方法。

 

然后灯被关。

 

 

我想不到什么方式比在实践中学习更好了,给大家上题吧





1)首先我们看到下面的类是 implements Command ,所以 Command 的一个接口  第一个空填: interface Command

 

2)(3)我们看 LightOnCommand LightOffCommand 都有 Light light 构造函数里light做参数,所以 他们是依赖关系(依赖被指向的做参数,做返回值还记得吗),所以我们可以确定 light就是图中的ReceiverLightOnCommandLightOffCommand light中获得具体的开灯关灯方法

 

所以这两个空填: light.on()   , light.off()

 

 

4)(5我们看RemoteControl类,类里有方法setCommand 所以他是Invoker 是告诉 Command 我要执行什么命令的类。

 

首先,在RemoteControl中实例化了两个数组,因为应题目要求我们要有7个捏槽

 

onCommands是实例化的对象的地址,指向数组





我们看setCommand里传了3个参数,只有slot没有用到,因为我们实例化的数组,所以可想slot表示的是第几个捏槽,即堆中的 0,1,2…6  ,而且我们要把开关第几个灯的要求告诉实现的命令,让他们去执行

所以这两个空是:

onCommands[slot]  offCommands[slot]

 

 

6)(7开关灯的按钮已经按下去了, 我们可以看主方法,主方法里把哪个屋子(LivingRoomLight/kitchenLight)的哪个等(0/1)已经定义的很清楚了,在这里执行按下去开关灯的按钮,所以是onCommands[slot].execute()   offCommands[slot].execute()

我们把slot传进去之后要告诉他该干什么,即execute

或者说,InvokerCommand是依赖关系,Command应该在Invoker中做参数或返回值

 

 

欢迎大家一起交流!



0 0
原创粉丝点击