首页 > 其他分享 >19-命令模式

19-命令模式

时间:2023-02-28 15:46:21浏览次数:36  
标签:19 void Barbecuer 模式 命令 command receiver Command public

19-命令模式

概念

命令模式(Command),将一个请求封装成一个对象,从而是你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作

命令模式作用
第一:能比较容易地设计一个命令队列
第二:在需要的情况下,可以较容易地将命令记入日志
第三:允许接收请求的一方据诶当是否要否决请求
第四:可以容易地实现对请求的撤销和重做
第五:由于加新的命令不影响其他的类,因此增加新的命令很容易
最关键的一点:命令模式把请求一个操作的对象与怎么执行一个操作的对象分割开

例子

烤肉的例子

package com.gof.command;

/**
 * 功能描述
 *
 * @since 2023-02-28
 */
public abstract class Command {
    protected Barbecuer receiver;

    public Command(Barbecuer receiver) {
        this.receiver = receiver;
    }

    public abstract void executeCommand();
}
package com.gof.command;

/**
 * 功能描述
 *
 * @since 2023-02-28
 */
public class BakeChickenWingCommand extends Command {
    public BakeChickenWingCommand(Barbecuer receiver) {
        super(receiver);
    }

    @Override
    public void executeCommand() {
        receiver.bakeChickenWing();
    }
}
package com.gof.command;

/**
 * 功能描述
 *
 * @since 2023-02-28
 */
public class BakeMuttonCommand extends Command {
    public BakeMuttonCommand(Barbecuer receiver) {
        super(receiver);
    }

    @Override
    public void executeCommand() {
        receiver.bakeMutton();
    }
}
package com.gof.command;

/**
 * 功能描述
 *
 * @since 2023-02-28
 */
public class Barbecuer {
    public void bakeMutton() {
        System.out.println("烤羊肉串!");
    }

    public void bakeChickenWing() {
        System.out.println("烤鸡翅!");
    }
}
package com.gof.command;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

/**
 * 功能描述
 *
 * @since 2023-02-28
 */
public class Waiter {
    private List<Command> commands = new ArrayList<>();

    public void addCommand(Command command) {
        commands.add(command);
        System.out.printf("增加订单:%s, 时间:%s \n", command.toString(), LocalDateTime.now());

    }

    public void cancelCommand(Command command) {
        commands.remove(command);
        System.out.printf("增加订单:%s, 时间:%s\n", command.toString(), LocalDateTime.now());

    }

    public void notifyExecute() {
        for (Command command : commands) {
            command.executeCommand();
        }
    }
}
package com.gof.command;

/**
 * 功能描述
 *
 * @since 2023-02-28
 */
public class Client {
    public static void main(String[] args) {
        // 开业前 烤肉师傅准备,烤羊肉串菜单准备,烤鸡翅菜单准备
        Barbecuer barbecuer = new Barbecuer();
        BakeMuttonCommand muttonCommand = new BakeMuttonCommand(barbecuer);
        BakeChickenWingCommand wingCommand = new BakeChickenWingCommand(barbecuer);

        // 开业后 客人下单,通知执行
        Waiter waiter = new Waiter();
        waiter.addCommand(muttonCommand);
        waiter.addCommand(muttonCommand);
        waiter.addCommand(wingCommand);
        waiter.notifyExecute();

    }
}

标签:19,void,Barbecuer,模式,命令,command,receiver,Command,public
From: https://www.cnblogs.com/Oh-mydream/p/17164476.html

相关文章

  • Mac 系统中,因环境变量配置错误,导致终端命令不可用,解决方法记录
    背景  在安装Auller过程中,因为第一次在mac系统中配置环境变量,环境变量配置错误,导致在终端中无法使用ls命令,显示无法识别此命令。现象:执行ls语句,查询当前目录......
  • 如何在CAD中徒手画不规则图形?你用过SKETCH命令吗?
    CAD画图过程中,当需要从扫描图上描绘出一些不规则的图形时,用直线或多段线命令绘制又很麻烦,那么,有什么办法可以快速在CAD中徒手画不规则图形呢?一看你就没有用过SKETCH命令,本......
  • “无所不能的中介”——代理模式
    1.简介定义:将某个对象中围绕某个主题的一些列行为委托给一个代理对象去执行,代理对象将控制和管理对原有对象的访问,调用者想要访问目标对象,必须通过代理对象去间接访问,代......
  • BUUctf ciscn_2019_n_1
    BUUciscn_2019_n_1首先file,是64位elfIDA,发现main函数会调用func函数,而func中如果v2=11.28125,就会cat/flag,并且上面有个gets,存在栈溢出漏洞压栈的过程是v1的44字节,然......
  • 19. Laravel 模型关系:远程一对多
    Laravel模型关系:远程一对多配套视频地址:https://www.bilibili.com/video/av73028135?p=5简单的说:Thread模型可以通过Author模型访问多个的Book模型。表threads......
  • CAD对齐命令怎么用?CAD对齐工具的使用技巧
    CAD对齐工具的特点是操作简单、功能实用,可以快速对齐CAD中的各种实体。那么,你知道CAD对齐命令怎么用吗?不知道也没关系,下面就和小编一起来了解一下浩辰CAD软件中CAD对齐工具......
  • 10条命令1分钟,快速分析Linux性能问题!
    秘籍:10条命令1分钟,快速分析Linux性能问题!如果某个Linux有性能问题,你登录之后来排查,第一分钟内你会使用哪些命令做那些方面的排查?在Netflix,我们在云端有大量的EC2实......
  • 即时通讯技术文集(第9期):Java NIO和Netty入门系列 [共19篇]
    为了更好地分类阅读52im.net总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第9 期。[-1-] 少啰嗦!一分钟带你读懂Java的NIO和经典IO的区别[链接] htt......
  • python exec_command 命令无效的原因
    当使用PythonParamikoexec_command执行时,某些Unix命令失败并显示“未找到”_互联网集市(qyyshop.com)链接里的解释解决了问题  本来直接调用runmqsc,命令无效,因......
  • 12. Laravel Passport 授权码模式
    LaravelPassport授权码模式配套视频地址:https://www.bilibili.com/video/av74879198?p=7哔哩哔哩提供一个“微信登陆”的链接,用户点击跳转到微信授权服务器。用户......