命令模式
<设计模式其实很简单>笔记
将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化。对请求排队或记录请求日志,并支持可撤销的操作。
//抽象命令
public abstract class Command{
protected Receiver receiver;
//构造函数
public Command(Receiver receiver){
this.receiver = receiver;
}
//抽象的执行命令方法
abstract public void Execute();
}
//具体命令
public void class ConcreteCommand extends Command{
public ConcreteCommand(Receiver receiver){
super(receiver);
}
//覆盖执行方法
//执行命令方法
@Override
public void Execute(){
receiver.Action();
}
}
//命令传达类
public class Invoker{
private Command command;
//设定命令
public void setCommand(Command command){
this.command = command;
}
//执行命令
public void ExecuteCommand(){
command.Execute();
}
}
//命令执行者
public class Receiver{
//行动方法
public void Action(){
System.out.println("execute the request");
}
}
//客户端
public static void main(String[] args){
Receiver receiver = new Receiver();
Command command = new ConcreteCommand(receiver);
Invoker invoker = new Invoker();
invoker.setCommand(command);
invoker.ExecuteCommand();
}
//命令模式本质就是对命令进行封装,并且将发出命令的责任和执行命令的责任分割开。不过每个命令都要有一个类
③适用的地方:
当需要抽象出待执行的动作以便参数化某个对象时。
当需要在不同的时刻执行、排列一级执行请求时。
当系统需要支持取消操作时。
当系统需要记录、修改日志时
④优点:
降低了系统的耦合度
新的命令可以很容易地加入到当前系统中
可以比较容易地设计一个命令队列和组合命令。
可以方便地实现对请求的撤销和重做。