zoukankan      html  css  js  c++  java
  • 设计模式之命令模式

    命令模式

    将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。

    Command

    package com.hml.command;
    
    public abstract class Command {
    
        protected Receiver receiver;
    
        public Command(Receiver receiver) {
            this.receiver = receiver;
        }
        
        public abstract void excute();
        
    }

    ConcretaeCommand

    package com.hml.command;
    
    public class ConcretaeCommand extends Command {
    
        public ConcretaeCommand(Receiver receiver) {
            super(receiver);
        }
    
        @Override
        public void excute() {
            receiver.action();
        }
    
    }

    Receiver

    package com.hml.command;
    
    /**
     * 该类知道如何去处理命令 ,不同的命令可以有不同的Receiver
     */
    public class Receiver {
    
        public void action() {
            System.out.println("Receiver");
        }
    
    }

    Invoker

    package com.hml.command;
    
    public class Invoker {
        private Command command;
    
        public Command getCommand() {
            return command;
        }
    
        public void setCommand(Command command) {
            this.command = command;
        }
        
        public void excute() {
            command.excute();
        }
    }

    Test

    package com.hml.command;
    
    public class Test {
        public static void main(String[] args) {
            Receiver r = new Receiver();
            Command command = new ConcretaeCommand(r);
            Invoker i = new Invoker();
            i.setCommand(command);
            i.excute();
    
        }
    }

    类图

    命令模式的优点:

    1、比较容易设计命令队列

    2、可以容易的将命令记录日志

    3、接收请求方可决定是否接收请求

    4、可以容易的实现请求撤销和重做

    5、增加新的命令不影响其他的类,因此增加新的命令类很容易

  • 相关阅读:
    PHP 使用 header()实现重定向
    PHP抑制符号 @
    PHP自动加载spl_autoload_register
    打开PHP错误提示
    通过htaccess使用伪静态
    用反引号(``)标注表明或者字段名,防止跟 mysql关键字冲突
    Bootstrap 弹出框(Popover)插件
    jQuery 的 validator 验证,以及添加自定义验证规则。
    线程与并发(一) 多线程基础
    SpringCloud入门
  • 原文地址:https://www.cnblogs.com/heml/p/4652522.html
Copyright © 2011-2022 走看看