行为型模式-命令模式

news2025/1/13 15:44:15

 

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();
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/45235.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计springboot高校车辆管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

家居建材企业竞争白热化,如何通过供应商协同系统转型升级,提高核心竞争力

伴随房地产高景气时代逐渐退去&#xff0c;新房销售红利期或已接近尾声&#xff0c;家居建材需求正迈入平稳发展新阶段&#xff0c;企业之间竞争更加白热化。在面对数字化时代的快速发展&#xff0c;很多家居建材企业已达成这样的共识&#xff1a;数字化是企业未来发展的必由之…

人工智能岗位可以考什么证书?考试难不难?

最近几年人工智能在市场上的热度越来越大&#xff0c;很多企业都会利用这个项目来发展自己新渠道&#xff0c;那么想进入这一行的人需要怎么提升自己的技能呢&#xff1f;那就是考取人工智能相关的证书&#xff0c;目前阿里云人工智能是国内市场最热门的认证分为两个等级&#…

(2)点云库PCL学习——剔除点云值

1、主要参考 (1) 点云离群点剔除 — open3d python_Coding的叶子的博客-CSDN博客_离群点去除 (2) open3d之点云异常值去除&#xff08;笔记5&#xff09;_Satellite_H的博客-CSDN博客 2、剔除的方法 2.1无效值剔除 详见我的上一篇blob &#xff08;1&#xff09;点云库…

C语言—指针进阶(详解篇)

目录 1.字符指针 1.1字符指针定义 1.2 字符指针用法 2.指针数组 2.1 指针数组定义及使用 3.数组指针 3.1 数组指针定义 3.2 &数组名和数组名 3.3 数组指针的基本用法 4. 数组参数、指针参数 5. 函数指针 5.1 函数指针定义既基本使用 5.2 有趣的代码 6. 函…

BMS 信息资源e分享平台

今天分享的是一款关于医学的企业内部实战系统。当时某药企内部面临现状是医学人力资源有限、信息量需求大、信息资源传递途径受限&#xff0c;覆盖范围小。为解决目前面临的问题&#xff0c;提高信息资源的统一性、准确性和安全性&#xff0c;优化资源获取流程&#xff0c;提高…

[vite.js]按需加载自动注册组件

最近(后知后觉)发现各大ui组件库的按需引入&#xff0c;在使用vite构建项目的时候&#xff0c;都推荐使用unplugin-vue-components插件自动解析ui组件来自动注册&#xff1b;就是说不需要再import { ... } from ..了&#xff0c;该插件会自动帮助解析并注册成组件。其实之前用n…

数字文档管理不能落后的 5 个原因

数字文档管理不能落后的 5 个原因 信息管理对于几乎每个行业的组织都至关重要。从财富 500 强企业到医疗机构&#xff0c;您处理文件的地点和方式都很重要。如果您坚持基于纸张的流程&#xff0c;那么您可能会落后于其他企业而且冒着很大的风险。 在许多组织中&#xff0c;数字…

Linux的Jdk安装教程

liunx下Jdk安装教程 1.创建jdk的安装目录&#xff08;/usr/local/src&#xff09; 确保安装的目录是空的&#xff0c;如果不是空的&#xff0c;删除一下&#xff0c;或者放在自己其他的目录也可以 mkdir -p /usr/local/src/jdk这里可能会出现之前安装过jdk&#xff0c;可以用下…

用HTML+CSS做一个漂亮简单的轻量级图片相册博客网站(web前端期末大作业)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

web表单(详解)

目录 1. 表单的概述 1.1 表单组成 2. 表单标记 2.1 input标记 2.2 select标记 2.3 textarea标记 3.HTML5新增标记 3.1 datalist标记 3.2 date 输入类型 3.3 color输入类型 3.4 button标记 3.5 details标记和summary标记 3.6 progress标记 3.7 meter标记 4 综合…

【pen200-lab】10.11.1.5

pen200-lab 学习笔记 【pen200-lab】10.11.1.5 &#x1f525;系列专栏&#xff1a;pen200-lab &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月29日&#x1f334; &#x1f36d;作者…

阿里资深架构师谈 Java 进阶攻略:7 大技能 +12 份进阶笔记 + 面试 150 题

以下都是阿里大牛推荐的主流技术&#xff0c;当你全部掌握上述的这些技术那么你就已经是 P8 级别&#xff0c;而且你也已经形成了自己的体系&#xff0c;当更加新潮的技术出来时那么你自己稍微花点时间就能吃透&#xff0c;毕竟那时候你已经不是以前的那个你了&#xff0c; 懂底…

竞赛——【蓝桥杯】2022年12月第十四届蓝桥杯模拟赛第二期C/C++

1、最小的2022 问题描述 请找到一个大于 2022 的最小数&#xff0c;这个数转换成二进制之后&#xff0c;最低的 6 个二进制为全为 0 。 请将这个数的十进制形式作为答案提交。 答案提交 这是一道结果填空的题&#xff0c;你只需要算出结果后提交即可。本题的结果为一个整数…

分享 2022 年最受欢迎的黑科技工具(二)

Hello, everybody &#xff0c;2022 年最受欢迎的黑科技工具&#xff08;二&#xff09;&#xff0c;收藏一波吧&#xff0c;您的在看、转发、点赞就是对tuonioooo最大的支持&#xff01; 1.Sampler 项目地址&#xff1a;https://github.com/sqshq/sampler 官网地址&#xf…

Fmoc-PEG4-NHS酯,1314378-14-7 含有Fmoc保护胺和NHS酯

●英文&#xff1a;Fmoc-PEG4-NHS酯 ●外观以及性质&#xff1a;粘性液体或固体粉末&#xff0c;一般取决于分子量&#xff0c;是一种含有Fmoc保护胺和NHS酯的PEG连接剂。亲水性PEG间隔物增加了在水介质中的溶解度。Fmoc基团可在碱性条件下脱保护以获得游离胺&#xff0c;其可…

springboot+java+vue大学生求职招聘就业岗位匹配推荐系统

目 使用人职匹配推荐系统分为管理员和用户、企业三个权限子模块。 管理员所能使用的功能主要有&#xff1a;首页、个人中心、用户管理、企业管理、岗位信息管理、岗位类型管理、应聘信息管理、应聘状况管理、平台费用管理、系统管理等。 用户可以实现&#xff1b;首页、个人中…

JavaScript基础语法(运算符)

JavaScript基础语法&#xff08;运算符&#xff09; 概述 相比于Java,JS多了一个&#xff0c;其他的下面的运算符都一样。 一元运算符&#xff1a;&#xff0c;– 算术运算符&#xff1a;&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;% 赋值运算符&#xff1a;&…

我要涨知识——TypeScript 经典高频面试题(一)

又是一个年底来了&#xff0c;好大一批人可能又准备跑路了&#xff0c;翻了翻掘金和 CSDN 发现好多大佬都有大厂 Offer &#xff0c;看着看着我心动了&#xff01; 话不多说&#xff0c;赶紧开干&#xff0c;给自己整了一个前端面试小助手——微信小程序内搜索 “WEB学习学习加…

鲲鹏devkit性能分析工具介绍(二)

鲲鹏devkit性能分析工具介绍&#xff08;二&#xff09; 上一篇笔记录性能分析工具的全景分析模式的基本原理和重点参数的解读&#xff0c;在这片文章里将会讲解其他的分析功能特点和重点参数 进程/线程性能分析 进程/线程性能分析借鉴业界的USE方法&#xff0c;采集进程/线…