设计模式之命令模式
命令模式将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象,同时也支持撤销操作、。
如果你有一个对象,有人向这个对象发送请求,关键点在于这个对象,我们有一个对象,有人向这个对象发送请求。这个请求就是我们想要封装的,不是封装这个请求的接收者,也不是封装这个请求的发送者,而是封装在两者之间的这个请求。
UML类图
案例
public class Client {
public static void main(String[] args) {
Light light=new Light();
Invoker invoker=new Invoker(new LightOnCommand(light), new LightOffCommand(light));
invoker.clickOn();
invoker.clickOff();
}
}
public interface ICommand {
void execute();
void unexecute();
}
public class Invoker {
ICommand on;
ICommand off;
public Invoker(ICommand on,ICommand off) {
// TODO Auto-generated constructor stub
this.on=on;
this.off=off;
}
public void clickOn() {
on.execute();
}
public void clickOff() {
off.execute();
}
}
public class Light {
void On() {
System.out.println("The Light is on");
}
void Off() {
System.out.println("The Light is off");
}
}
public class LightOffCommand implements ICommand{
Light light;
public LightOffCommand(Light light) {
// TODO Auto-generated constructor stub
this.light=light;
}
@Override
public void execute() {
// TODO Auto-generated method stub
this.light.Off();
}
@Override
public void unexecute() {
// TODO Auto-generated method stub
this.light.On();
}
}
public class LightOnCommand implements ICommand{
Light light;
public LightOnCommand(Light light) {
// TODO Auto-generated constructor stub
this.light=light;
}
@Override
public void execute() {
// TODO Auto-generated method stub
light.On();
}
@Override
public void unexecute() {
// TODO Auto-generated method stub
light.Off();
}
}