美文网首页java设计模式笔记
设计模式十四--命令模式

设计模式十四--命令模式

作者: 朽木亦自雕 | 来源:发表于2019-03-19 14:00 被阅读0次

    定义

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

    模板方法模式的角色

    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.haomeiwen.com/subject/mnzqlqtx.html