命令模式(命令)

命令模式

文章目录

  • 命令模式
    • 什么时命令模式
    • 通过示例了解命令模式

什么时命令模式

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

通过示例了解命令模式

命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求参数化其他对象。命令模式也支持撤销操作。下面是一个简单的Java命令模式示例,以控制家电设备为例:

接受者接口:家电设备接口

public interface Device {void on();void off();
}

具体接收者:电视

public class Television implements Device {@Overridepublic void on() {System.out.println("Television is turned on.");}@Overridepublic void off() {System.out.println("Television is turned off.");}
}

具体接收者:空调

public class AirConditioner implements Device {@Overridepublic void on() {System.out.println("Air conditioner is turned on.");}@Overridepublic void off() {System.out.println("Air conditioner is turned off.");}
}

命令接口:设备控制接口

public interface Command {void execute();
}

具体命令:打开设备的命令

public class TurnOnCommand implements Command {private Device device;public TurnOnCommand(Device device) {this.device = device;}@Overridepublic void execute() {device.on();}
}

具体命令:关闭设备的命令

public class TurnOffCommand implements Command {private Device device;public TurnOffCommand(Device device) {this.device = device;}@Overridepublic void execute() {device.off();}
}

请求者:遥控器

public class RemoteControl {private Command command;public void setCommand(Command command) {this.command = command;}public void pressButton() {command.execute();}
}

主程序

public class CommandPatternDemo {public static void main(String[] args) {RemoteControl remote = new RemoteControl();Device television = new Television();Command turnOnTelevision = new TurnOnCommand(television);Command turnOffTelevision = new TurnOffCommand(television);remote.setCommand(turnOnTelevision);remote.pressButton(); // 输出:Television is turned on.remote.setCommand(turnOffTelevision);remote.pressButton(); // 输出:Television is turned off.Device airConditioner = new AirConditioner();Command turnOnAirConditioner = new TurnOnCommand(airConditioner);Command turnOffAirConditioner = new TurnOffCommand(airConditioner);remote.setCommand(turnOnAirConditioner);remote.pressButton(); // 输出:Air conditioner is turned on.remote.setCommand(turnOffAirConditioner);remote.pressButton(); // 输出:Air conditioner is turned off.}
}
  1. Device接口是接受者,定义了设备的基本操作。
  2. Television和AirConditioner是具体接收者,实现了Device接口。
  3. Command接口是命令接口,定义了执行命令的方法
  4. TurnOnCommand和TurnOffCommand是具体命令,它们持有设备对象并实现了execute方法。
  5. RemoteControl是请求者,它持有一个命令对象,并调用execute方法来执行命令。
  6. main方法展示了如何使用遥控器控制不同设备的开关操作。

通过命令模式,我们可以轻松地添加新的设备和控制操作,同时保持遥控器类的简洁。

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

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

相关文章

黑马基于Web-socket的java聊天室基本解析

要是用Web-socket协议&#xff0c;我们要前端upgrade升级成web-socket协议 首先我们要引入springboot的websocket起步依赖&#xff0c;这样子方便使用&#xff0c;自己指定版本注意 <dependency><groupId>org.springframework.boot</groupId><artifactId&…

Django视图Views

Views视图 HttpRequest 和HttpResponse Django中的视图主要用来接受web请求&#xff0c;并做出响应。视图的本质就是一个Python中的函数视图的响应分为两大类 1)以Json数据形式返回(JsonResponse) 2)以网页的形式返回 2.1)重定向到另一个网页 (HttpRe…

Mini Cheetah 代码分析(八)基于零空间的任务分级

一、主要公式 二、源代码注释 三、相关原理解释 一、主要公式 二、源代码注释 该功能的实现在文件KinWBC.cpp中的FindConfiguration函数&#xff0c;主要看注释&#xff0c;与公式是能够对应起来的&#xff0c;由第0个任务&#xff0c;也就是接触任务开始进行迭代&#xff0…

Java类和对象(二)—— 封装,static 关键字与代码块

前言 在面向对象的编程语言中&#xff0c;有三大特性&#xff1a;封装、继承和多态~~ 今天我们就来学习封装的知识 封装 什么是封装 在现实生活中&#xff0c;我们经常使用手机来进行沟通与交流&#xff0c;实际上我们拿到的手机是被封装好的&#xff0c;精美的屏幕&a…

关键字详解

1.用于定义访问权限修饰符的关键字 面向对象程序三大特性&#xff1a;封装、继承、多态。 1.1 访问权限符 Java 中主要通过类和访问权限来实现封装&#xff1a; 类可以将数据以及封装数据的方法结合在一起 &#xff0c;更符合人类对事物的认知&#xff0c;而访问权限用来控制…

5月15日,机器人任务挑战赛(无人协同系统)第二期培训即将开启!

一.大赛培训通知 本月起&#xff0c;卓翼飞思实验室将针对机器人任务挑战赛&#xff08;无人协同系统&#xff09;赛项内容开启赛事培训计划&#xff0c;采用“线上线下”相结合的培训模式&#xff0c;围绕赛事关键技术&#xff0c;让您轻松应对比赛。本期培训为第二期&#x…

Go微服务: 日志系统ELK核心架构设计

微服务日志系统建设 1 &#xff09;为什么需要日志系统 业务发展越来越庞大&#xff0c;服务器越来越多各种访问日志&#xff0c;应用日志&#xff0c;错误日志量越来越多&#xff0c;无法管理开发人员排查问题&#xff0c;需要到服务器上查日志 2 &#xff09;Elastic Stack…

SpringBean详解

文章目录 概述Spring获取Bean的流程依赖注入bean的作用域Spring 中的 Bean 是线程安全的吗Spring如何处理线程并发问题bean 的自动装配和方式Resource和Autowired的区别bean的自动装配bean的生命周期BeanFactoryBeanFactory 常用的实现类有哪些BeanFactory与FactoryBean的不同A…

惠普打印机无线网络连接设置

休息一下&#xff0c;灌个水。这次没多少内容&#xff0c;具体步骤惠普官网上都有&#xff0c;唯一增加的是对安装过程中踩的坑做了一个说明。 一&#xff0e;打印机无线网络连接设置步骤 惠普打印机设置无线网络连接&#xff0c;共16个步骤。 1. 在电脑上打开任意浏览器&am…

HAProxy系列文章二《Patroni+ETCD+PG14+HAProxy的安装部署》

瀚高数据库 目录 文档用途 详细信息 文档用途 本文主要介绍Patroni架构下单点HAProxy的安装部署&#xff0c;通过单点HAProxy实现数据库的负载均衡。本文为HAProxy系列文章之一&#xff0c;其他相关文章请点击文档下方的相关文档链接进行详细查看&#xff0c;文章内不在赘述。…

Spring MVC(四) 数据校验

在开发过程中有一环必不可少的部分就是数据校验&#xff0c;用户在页面中填写的数据通过表单提交时&#xff0c;前端的JS可以做一些是否合法性的验证&#xff0c;比如是否为空、两次密码是否一致、格式是否正确等等验证。当数据到了后台控制器&#xff0c;为了确保程序的健壮性…

Python专家编程系列: 11.为什么在python使用__name__ == ‘__main__‘

0. 标题 Python专家编程系列: 11.为什么在python使用__name__ ‘main’ id: 104 作者: quantgalaxyoutlook.com 欢迎交流 1. 单个 python 文件中的 __name__ 是什么&#xff1f; 我们先看一个简单的python程序脚本a.py: # a.pyprint(__name__) # python a.py # _…

最直接解决 element + sortablejs 拖拽后顺序错误

直接按索引对调两行对象&#xff0c;免加row-key const oldRow this.valueMy[evt.oldIndex] this.valueMy[evt.oldIndex] this.valueMy[evt.newIndex] this.valueMy[evt.newIndex] oldRow

内网环境ubuntu设置静态ip、DNS、路由,不影响网络访问

内网环境通常是有线的&#xff0c;通过服务器的ip、mac、dns地址访问网络才生效的&#xff0c;如果ip地址变了&#xff0c;就不能访问网络了。 如果你的ip地址变了&#xff0c;或者要防止ip变更影响网络访问&#xff0c;就要设置 1、依次点击右上角的电源-设置&#xff0c;在打…

linux 正则表达式+文本三剑客

一、正则表达式 1.正则表达式的概念 REGEXP&#xff1a; Regular Expressions&#xff0c;由一类特殊字符及文本字符所编写的模式&#xff0c;其中有些字符&#xff08;元字符&#xff09;不表示字符字面意义&#xff0c;而表示控制或通配的功能&#xff0c;类似于增强版的通…

公司里的“卷王”,是主动卷还是迫于无奈?

先来唠唠 “卷” 这个词是近几年流行起来的网络用语&#xff0c;它是内卷的简化形式&#xff0c;“内卷”本来是一个名不见经传的普通词语&#xff0c;经网络流传&#xff0c;很多人就用其来指代非理性的内部竞争或“被自愿”竞争。 在现代职场&#xff0c;有一群人被戏称为&…

《大学数学3(第三版)》

文章目录 [toc]第一章&#xff1a;行列式第一节|方程组与行列式二元线性方程组和二阶行列式 第二节| n n n阶行列式排列逆序数对换例题 1 1 1 n n n阶行列式 第三节|行列式的性质和计算性质 1 1 1性质 2 2 2&#xff1a;互换 n n n阶行列式的任意两行&#xff08;列&#xff09…

机器学习算法那些事 | 60个“特征工程”计算函数(Python代码)

本文来源公众号“机器学习算法那些事”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;60个“特征工程”计算函数&#xff08;Python代码&#xff09; 近期一些朋友询问我关于如何做特征工程的问题&#xff0c;有没有什么适合初学…

【无标题】进程池/Linux

#include <iostream> #include <vector> #include <unistd.h> #include <cassert> #include <sys/types.h> #include <string> #include <sys/wait.h> // using namespace std; #include "Tash.hpp" class channel//封装文…

三分钟快速上手SpringSecurity框架

导入依赖框架 web 框架(spring-boot-starter-web) <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> springSecurity 框架(spring-boot-starter-security) <de…