zoukankan      html  css  js  c++  java
  • 对象行为型

    定义

    * 命令模式又称为行动(Action)模式或交易(Transaction)模式
    * 命令模式把一个请求或者操作封装到一个对象中
    * 命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能
    

    优点

    1.降低对象之间的耦合度。
    2.新的命令可以很容易地加入到系统中。
    3.可以比较容易地设计一个组合命令。
    4.调用同一方法实现不同的功能
    

    缺点

    使用命令模式可能会导致某些系统有过多的具体命令类
    因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用
    

    入门案例:

    UML图解:

    代码:

    Command:

    //抽象命令
    abstract public class Command {
    
        protected Receiver receiver; //命令执行者
        private String command; //命令
    
        public Command(Receiver receiver, String command) {
            this.receiver = receiver;
            this.command = command;
        }
    
    
        /**
         * 抽象方法
         */
        abstract public void execute();
    
        public String getCommand() {
            return command;
        }
    
        public void setCommand(String command) {
            this.command = command;
        }
    }
    
    

    LsfCommand:

    //具体命令(请求)
    public class LsfCommand extends Command {
    
        public LsfCommand(Receiver receiver) {
            super(receiver, "螺蛳粉");
        }
    
        @Override
        public void execute() {
            receiver.action( getCommand() );
        }
    }
    

    NrcCommand:

    //具体命令(请求)
    public class NrcCommand extends Command {
    
        public NrcCommand(Receiver receiver) {
            super(receiver, "牛肉串");
        }
    
        @Override
        public void execute() {
            receiver.action( getCommand() );
        }
    }
    

    Receiver:

    //请求处理者
    public class Receiver {
        public void action(String command){
            System.out.println("好的,现在就给你做" + command);
        }
    }
    

    Invoke:

    //命令执行者
    public class Invoker {
        private Command command;
    
        public Invoker(Command command){
            this.command = command;
        }
    
        public void execiteCommand(){
            this.command.execute();
        }
    
        public Command getCommand() {
            return command;
        }
    
        public void setCommand(Command command) {
            this.command = command;
        }
    }
    

    Client(测试):

    public class Main {
        public static void main(String[] args){
    
    
            Receiver receiver = new Receiver();             //请求处理者
            Command command = new LsfCommand( receiver );   //螺蛳粉命令(具体请求)
            Invoker invoker = new Invoker( command );       //执行命令者
            invoker.execiteCommand();                       //落实执行具体的命令
    
            Command command2 = new NrcCommand( receiver );  //牛肉串粉命令(具体请求)
            invoker.setCommand( command2 );
            invoker.execiteCommand();
    
            /**
             * output:
                 好的,现在就给你做螺蛳粉
                 好的,现在就给你做牛肉串
             */
    
        }
    }
    

    以上内容均源自网络再加以修改

  • 相关阅读:
    TDSSNIClient initialization failed with error 0x7e, status code 0x60.
    SourceSafe Outof Memory
    机器学习(Part I)机器学习的种类
    机器学习PartIII:测试算法和NFL定理
    Google架构学习
    MediaWiki安装问题总结
    [转]IT项目管理实务
    几本关于统计学习的书
    Googlebot开始检索网站深层内容
    中文搜索引擎技术之网页排序
  • 原文地址:https://www.cnblogs.com/tandi19960505/p/8289984.html
Copyright © 2011-2022 走看看