行为型模式-命令模式

2023-11-05

 

package per.mjn.pattern.command;

import java.util.HashMap;
import java.util.Map;

// 订单类
public class Order {

    // 餐桌号码
    private int diningTable;

    // 点的餐品和份数
    private Map<String, Integer> foodDir = new HashMap<>();

    public int getDiningTable() {
        return diningTable;
    }

    public void setDiningTable(int diningTable) {
        this.diningTable = diningTable;
    }

    public Map<String, Integer> getFoodDir() {
        return foodDir;
    }

    public void setFood(String name, int num) {
        foodDir.put(name, num);
    }
}
package per.mjn.pattern.command;

// 厨师类
public class SeniorChef {

    public void makeFood(String name, int num) {
        System.out.println(num + "份" + name);
    }
}
package per.mjn.pattern.command;

// 抽象命令类
public interface Command {

    void execute();
}
package per.mjn.pattern.command;

import java.util.Map;
import java.util.Set;

// 具体的命令类
public class OrderCommand implements Command {

    // 持有接受者对象
    private SeniorChef receiver;
    private Order order;

    public OrderCommand(SeniorChef receiver, Order order) {
        this.receiver = receiver;
        this.order = order;
    }

    @Override
    public void execute() {
        System.out.println(order.getDiningTable() + "桌的订单:");
        Map<String, Integer> foodDir = order.getFoodDir();

        // 遍历map集合
        Set<String> keys = foodDir.keySet();
        for (String foodName : keys) {
            receiver.makeFood(foodName, foodDir.get(foodName));
        }

        System.out.println(order.getDiningTable() + "桌的饭准备完毕!!!");
    }
}
package per.mjn.pattern.command;

import java.util.ArrayList;
import java.util.List;

// 服务员类,属于调用者角色
public class Waiter {

    // 持有多个命令对象
    private List<Command> commands = new ArrayList<>();

    public void setCommand(Command cmd) {
        // 将cmd对象存储到list集合中
        commands.add(cmd);
    }

    // 发起命令功能  喊 订单来了
    public void orderUp() {
        System.out.println("服务员说:大厨,新订单来了.");
        // 遍历list集合
        for (Command command : commands) {
            if (command != null) {
                command.execute();
            }
        }
    }
}
package per.mjn.pattern.command;

public class Client {
    public static void main(String[] args) {

        // 创建第一个订单对象
        Order order1 = new Order();
        order1.setDiningTable(1);
        order1.setFood("鸡翅", 2);
        order1.setFood("小杯可乐", 2);

        // 创建第二个订单对象
        Order order2 = new Order();
        order2.setDiningTable(2);
        order2.setFood("鸡排", 2);
        order2.setFood("小杯雪碧", 2);

        // 创建接受者对象(厨师对象)
        SeniorChef receiver = new SeniorChef();

        // 创建命令对象
        OrderCommand cmd1 = new OrderCommand(receiver, order1);
        OrderCommand cmd2 = new OrderCommand(receiver, order2);

        // 创建调用者(服务员对象)
        Waiter waiter = new Waiter();
        waiter.setCommand(cmd1);
        waiter.setCommand(cmd2);

        // 让服务员发起命令
        waiter.orderUp();
    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

行为型模式-命令模式 的相关文章

随机推荐

  • 数据结构复习总结

    第一章 绪论 这里介绍了数据结构的基本概念和术语 以及算法和算法时间复杂度的分析方法 主要内容如下 1 数据结构是一门研究非数值计算程序设计中操作对象 以及这些对象之间的关系和操作的学科 2 数据结构包括两个方面的内容 数据的逻辑结构和存储
  • 挖矿kdevtmpfsi病毒处理

    通过top命令可以看到kdevtmpfsi导致CPU 700 多 导致该病毒只要是通过redis漏洞进来的 1 该病毒还有守护进程 如果光kill掉该病毒 过段时间又起来的 守护进程 kinsing 2 该病毒还有定时任务 如果光杀死kde
  • android中实现登录功能实现原理,用一个最简单的登录例子来了解Android的MVC和MVP架构的原理和实现...

    在目前的Android开发中 MVP与MVC架构还有MVVM都非常流行 三者在不同的场景下都有各自的优势和劣势 一般而言会根据具体的业务场景来选择不同的模式 所以并不是说开发一个App一定完全遵循那种模式 完全可以根据业务场景不同混合多种模
  • 书写中断服务函数的时候注意的问题:

    书写中断服务函数的时候注意的问题 1 中断服务函数名尽量用复制 不要自己写 因为只要你写错一个字母 这个函数就变成普通函数了 2 如果中断服务函数是公共入口 进入到中断服务函数后先要查询是哪种中断 3 先清中断标志 然后再做中断处理 不要把
  • python项目之弹球小游戏 2

    Hello 大家好 我们又见面了 本来我是想再拖几天再发布的 可我的良心不允许我这么做 毕竟在 python项目之弹球小游戏 1 中我们只是写了窗口的程序 还没有加入我们的主题元素呢 所以今天 我们就来加入 小球 这个关键因素 小球的图片素
  • Android 获取apk中的所有类

    直接把下面代码放到工具类调用即可 import android content Context import android os Build import android util Log import com duole games s
  • vue移动端适配(px转vw)postcss-px-to-viewport配置

    安装postcss px to viewport npm install postcss px to viewport 根目录新建postcss config js文件 postcss config js文件 module exports
  • FPGA自学之路4(按键消抖)

    先看框图 按键消抖意思就是前面和后面会有一系列信号抖动 中间才是我们要的信号 这里预设中间需要的信号 gt 20ms 用计数器计数 key in低电平就开始计数 高电平就清零 等计数器能计数到M 1 20ms 时输出一个高电平 这个按键消抖
  • Windows在线安装Qt5.15.2教程、Qt组件模块选择

    1 Qt5 15 2安装包 https download qt io 从archive qt里选 2 Qt5 15 2在线安装教程 https blog csdn net Qi 1337 article details 121249717
  • 关于:Error:java:java.lang.ExceptionInInitializerError 问题的解决

    本地运行项目的时候报上面错误 原因是jdk版本过高导致 解决方法步骤如下 idea 1 点击 File Project Structrue 2 把这两个圈起来的选项改成如下 3 保存 再次运行问题解决
  • 冒泡排序、插入排序、希尔排序、选择排序、堆排序、快速排序六大排序详解

    1 冒泡排序 思路 左右相邻的两个数互相比较 大的交换到序列后边 每次遍历排出剩余的最大的数 如下图所示 代码如下 void BubbleSort int a int n n为数组元素个数 int i 0 j 0 for i 0 i lt
  • 【已解决】No qualifying bean of type ‘service.Service‘ available

    Exception in thread main org springframework beans factory NoSuchBeanDefinitionException No qualifying bean of type serv
  • MySql优化实战案例

    文章目录 建立测试表 联合索引第一个字段用范围不走索引 覆盖索引优化 in和or在表数据量比较大的情况会走索引 在表记录不多的情况下会选择全表扫描 like KK 一般情况都会走索引 Order by 和 group by优化 Order
  • [LeetCode] Valid Anagram - 字符串排序比较系列

    题目概述 Given two strings s and t write a function to determine if t is an anagram of s For example s anagram t nagaram ret
  • Matplotlib:Adding an axes using the same arguments as a previous axes

    学习 机器学习实战 kNN时 在使用Matplotlib画图时 发现了一个Warining MatplotlibDeprecationWarning Adding an axes using the same arguments as a
  • discuz手机端修改url

    discuz的站需要做伪静态 修改url 本来是直接在最外层用ob函数来替换 pc端的可以 但是这个方法用在手机端的时候 发现失效 后来发现是手机端的php文件使用了函数清空了缓存 ob end clean source class hel
  • python随机性实验

    20210408 0 引言 在另外一篇文章中说明了在使用深度学习库的时候 实验结果的可复现的属性 深度学习实验结果可复现所需设置 随机数等内容设置 文中提到 如果是用GPU加速的话 那么很可能导致实验无法复现 那么就只能使用CPU 好在手里
  • LeetCode:第302场周赛【总结】

    这场比赛用C 写了两个题 在赛后用python补题收获很多 学习了一些python的内置函数 方法学习源于其他优秀的博主 6120 数组能形成多少数对 A题 思路 方法一 我自己写的算法 先对nums排序 之后遍历数组找相邻的位置是否相同
  • 【Docker】Docker安装

    1 添加内核参数 1 通过实训平台进入到操作系统界面 在 后输入vi etc sysctl conf命令 然后按Enter键 进入编辑模式 示例代码如下 root xxx vi etc sysctl conf 2 编辑配置文件 etc sy
  • 行为型模式-命令模式

    package per mjn pattern command import java util HashMap import java util Map 订单类 public class Order 餐桌号码 private int di