纵有疾风起
人生不言弃

设计模式十四–命令模式

定义

将一个请求封装成一个对象,从而让你使用不同的请求参数把客户端参数化,对请求排队或者记录日志请求,可以提供对命令的撤销和恢复模式。

模板方法模式的角色

1:命令角色(Command)
该角色声明一个给所有具体命令类的抽象接口,定义需要执行的命令。

public interface Command{  public void execute();}

2:具体命令(Concrete Command)
该角色定义一个接受者额行为之间的弱耦合,实现命令方法,并调用接受者的相应操作。

public class ConcreteCommand implements Command{    private Receiver reveicer;    public ConcreteCommand(Receiver receiver){      this.reveicer = receiver;    }      public void execute(){      this.receiver.action();    }    }

3:调用者角色(Invoker)
该角色负责调用命令对象执行请求。

public class Invoker{  private Command command;  public void setCommand(Command command){    this.command = command;  }  public void action(){    this.command.action();    }}

4:接受者角色(Receiver)
该角色负责具体实施和执行一个请求。

public class Receiver{    public void action(){      System.out.println("执行动作!");    }}

客户端代码:

public class Client{  public static void main(String[] args){    Invoker invoker = new Invoker();    invoker.setCommand(new ConcreateCommand(new Receiver()));    invoker.action();  }}

优点

1:类之间解耦,调用者和接收者之间没有依赖关系
2:可扩展性,Comand的子类可以非常容易的扩展。
3:命令模式可以和其他好多模式相结合使用(责任链模式、模板方法模式)

缺点

使用命令模式容易导致系统中出现过多的具体命令类。

使用场景

1:使用命令模式作为回调,在面向对象系统中的替代。
2:需要在不同的事件指定请求,将请求排队。
3:系统需要支持命令的撤销。
4:一个系统需要支持交易的,可以扩展多个交易类型。

参考资料:设计模式(java)

文章转载于:https://www.jianshu.com/p/930cfec22d33

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » 设计模式十四–命令模式
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录