设计模式(11)-----命令设计模式
Posted qingruihappy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式(11)-----命令设计模式相关的知识,希望对你有一定的参考价值。
把命令封装成一个命令对象,使请求者和被请求者完全解耦。我们先来看一下类图:
下面我们来看代码
Invoker==SimpleRemoteControl
public class SimpleRemoteControl {
Command slot;// 有一个插槽持有命令,而这个命令控制着设备
public SimpleRemoteControl() {
}
public void setCommand(Command command) {
slot = command; }
public void buttonWasPressed() {
slot.execute();
}
}
command==Command
public interface Command { public void execute();
}
concreteCommand==LightOffCommand
public class LightOffCommand implements Command {
Light light;
public LightOffCommand(Light light) {
this.light = light;
}
public void execute() {
light.off();
}
}
concreteCommand==LightOnCommand
public class LightOnCommand implements Command {
Light light;
public LightOnCommand(Light light) {
this.light = light;
}
public void execute() {
light.on();
}
}
concreteCommand==GarageDoorOpenCommand
public class GarageDoorOpenCommand implements Command { GarageDoor garageDoor;
public GarageDoorOpenCommand(GarageDoor garageDoor) {
this.garageDoor = garageDoor;
}
public void execute() {
garageDoor.up();
}
}
recevier==Light
public class Light {
public Light() {
}
} | public void on() { System.out.println("Light is on"); } public void off() { System.out.println("Light is off"); } |
client==Test
- @说明: 不解耦的设计就是按下灯开的开关,灯开了,我按下灯灭的操作灯灭了。
- 按下车开的开关,车开了,按下车停的操作,车停了。现在开关是两个,并且每个开关有两个命令。
*
- 解构的设计就是我不知道我现在开关是谁的开关,你告诉我说我是灯的开关,并且是灯开的指令,我就是开灯的命名我就把灯打开了,
- 你告诉我说是灯灭的命令,我就把灯灭了; 你告诉我说我是车的开关,我按下开关,你告诉我说开车的指令,我就开车了,你告诉我说是停车的指令我就停车了
*
- 那解耦的设计它是如何实现的呢, 一:告诉我我是谁,并且是什么指令 1.1,有一个灯开灯灭的灯的实例 1.2,把灯传给一个一个灯开的命令对象。
- 1.3,让后把灯开的命令对象给开关。 1.4,我按下开关等就开了。
- 补充:这里面需要注意的地方就是开关是不知道控制谁的,定义好的固定的方法excute()
- 好了,你先在告诉我说我现在是灯开的命令对象(LightOnCommand),那我就去灯开的命令对象里面去看一下
- LightOnCommand.execute 到里面一看果然是灯开的指令light.on()
*
- 二:我按下开关
*
*
- 开关==遥控器==调用者
*
- 我们接着再来梳理一下:
- 站在调用者(遥控器)的角度:没给我命令之前(命令对象)我不知道我控制的是谁,我控制谁的什么命令。不想以前,上来我就确定我是灯的开关,我是车的开关。
- 站在接受者(车,灯)的角度:我现在每一条指令都会封装成一条命令(命令对象)。不想以前,我有许多的指令在里面。
- 站在两者解耦联系的角度:接受者封装一条命令(命名对象)给调用者,调用者确定了命令对象之后根据已经约定好的方法,去命令对象中找到这个方法,
- 让后在到接受者中去执行相应的指令。
*
*
- 在来捋一下,现在遥控器不知道自己是谁,也不知道自己要执行谁的什么命令,只有你告诉我我是谁,并通过约定俗成的方法调用已经知道了谁的
- 约定俗称的方法,来确定下来我要执行什么命令。
| |
} | } |
kk
以上是关于设计模式(11)-----命令设计模式的主要内容,如果未能解决你的问题,请参考以下文章