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

xiaoxiao2021-02-28  109

 

Invoker是下达命令

 

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

 

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

 

比如:

Invoker发出命令:我要关灯

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

 

然后灯被关。

 

 

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

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

 

2)(3)我们看 LightOnCommand LightOffCommand 都有 Light light 构造函数里light做参数, 所以 他们是依赖关系(依赖被指向的做参数,做返回值还记得吗), 所以我们可以确定 light就是图中的ReceiverLightOnCommand LightOffCommand 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中做参数或返回值

 

 

欢迎大家一起交流!

转载请注明原文地址: https://www.6miu.com/read-34712.html

最新回复(0)