Invoker是下达命令
Command是抽象的命令, ConcreteCommand1和ConcreteCommand2是具体要实现什么样的命令
ConverteCommand1 和ConcreteCommand2 从Receiver中获得执行命令的具体方法
比如:
Invoker发出命令:我要关灯
ConverteCommand1从 Receiver中获得关灯的方法 ,在ConverteCommand1 实现Receiver 中的关灯方法。
然后灯被关。
我想不到什么方式比在实践中学习更好了,给大家上题吧
(1)首先我们看到 下面的类是 implements Command , 所以 Command 的一个接口 , 第一个空填: interface Command
(2)(3)我们看 LightOnCommand 和 LightOffCommand 类 里 都有 , Light light , 构造函数里light做参数, 所以 他们是依赖关系(依赖被指向的做参数,做返回值还记得吗), 所以我们可以确定 ,light就是图中的Receiver,LightOnCommand 和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
或者说,Invoker和Command是依赖关系,Command应该在Invoker中做参数或返回值
欢迎大家一起交流!