经典的设计模式14——命令模式

news/2024/11/8 0:44:51/

文章目录

  • 命令模式


命令模式

定义:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开,这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。
结构:
抽象命令类角色(command):定义命令的接口,生命执行的方法
具体命令角色(concreteCommand):具体的命令,实现命令接口;通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。
实现者/接收者角色(receiver):接收者,真正执行命令的对象,任何类都可能成为一个接收者,只要它能够实现命令要求实现的相应功能。
调用者/请求者(invoker)角色:要求命令对象执行请求,通常会持有命令对象,可以持有很对的命令对象。这个是客户端真正触发命令并且要求要执行的相应操作的地方,相当于使用命令对象的接口。
命令模式可以和备忘录模式结合支持撤销操作。
应用场景:
1.请求队列化
2.支持取消操作
3.当系统崩溃,能把对系统的操作功能重新执行一遍
4.在需要事务的系统
本质:封装请求
优点
降低系统的耦合度。命令模式能够将调用操作的对象与实现该操作的对象解耦。
增加或删除命令非常方便。采用命令模式,增加与删除命令不会影响其他类,它满足开闭原则,对扩展比较灵活。
可以实现宏命令。命令模式可以与组合模式结合,将多个命令装配成一个组合命令,即宏命令。
方便实现undo和redo操作。命令模式可以和备忘录模式结合,实现命令的撤销与恢复。
使用场景:
系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。
系统需要在不同的时间指定请求、将请求排队和执行请求。
系统需要undo和redo操作。
点餐案例:(还有个组装电脑的案例)

package 命令模式;import java.util.ArrayList;
import java.util.List;public class waiter {private List<command> orders = new ArrayList<command>();public void setorder(command c) {orders.add(c);}public void removeorder(command c) {orders.remove(c);}public void Notify() {for (int i = 0; i < orders.size(); i++) {command c = orders.get(i);c.excutecommand();}}
}
package 命令模式;public abstract class command {protected barbecure receiver;public command(barbecure receiver) {this.receiver = receiver;}public abstract void excutecommand();}
package 命令模式;public class barbecure {public void kaoyangrou() {System.out.println("烤羊肉串");}public void kaojichi() {System.out.println("烤鸡翅");}
}

http://www.ppmy.cn/news/350574.html

相关文章

JavaScript内置对象

2.JavaScript内置对象 2.1、Number 方法介绍 Number 方法名说明parseFloat()将传入的字符串浮点数转为浮点数parseInt()将传入的字符串整数转为整数 代码实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">…

编程的实践理论 第七章 理论的设计和实现

第七章 理论的设计和实现 编程语言的设计者与实现者已经创建了形式化&#xff0c;抽象&#xff0c;理论和结构&#xff0c;程序员则使用这些对象。 随着程序的写成&#xff0c;随着引入了名称&#xff0c;程序员创建了新的形式化&#xff0c;新的抽象&#xff0c;理论和结构。…

十三、临界资源,临界区

一、临界资源 被多个进程能够看到的公共资源 叫做 临界资源。&#xff08;管道和共享内存都叫临界资源&#xff0c;只是管道是安全的&#xff0c;共享内存是不安全的&#xff09; 如果没有对临界资源进行任何保护&#xff0c;对于临界资源的访问&#xff0c;双方进程在进行访问…

编译原理中有穷自动机DFA是什么?

DFA DFA&#xff08;Deterministic Finite Automaton&#xff0c;确定有限状态自动机&#xff09;是一个五元组&#xff0c;包括&#xff1a; 1. 状态集合&#xff08;Q&#xff09;&#xff1a;有限个状态的集合。 2. 输入字母表&#xff08;Σ&#xff09;&#xff1a;有限…

75寸电视长宽多少厘米

75寸电视的长和宽&#xff0c;精确为166.03厘米、93.38厘米&#xff0c;大约为166厘米、93厘米。 家里的电视就是活动时8折抢购的真不错http://www.adiannao.cn/dw 电视的尺寸一般都是代表电视屏幕对角线的长度&#xff0c;所以这里的75寸&#xff0c;其实就是电视屏幕对角线…

寸和厘米

86英寸的电视的一般宽高尺寸约为&#xff1a;1935.5mmx1189.5mm&#xff08;含底座尺寸&#xff09;&#xff0c;1935.5mmx1111.5mm&#xff08;单屏尺寸&#xff09;。不同品牌的尺寸会有一点偏差。 详细计算分析过程如下&#xff1a; 英寸&#xff0c;是使用于联合王国(UK,…

PotPlayer固定播放尺寸

目录 STEP 1&#xff1a;进入“播放设置”STEP 2&#xff1a;自定义用播放窗口尺寸 PotPlayer是一个非常好用的视频播放器&#xff0c;但是每次新打开一个视频都SB地自己调整窗口大小。下面介绍一种方式避免这个问题&#xff0c;从而每次打开都是固定尺寸的窗口。 STEP 1&…

机器学习复习(下)

严正声明&#xff1a;本文的答案是ChatGPT的回答&#xff0c;仅供参考&#xff0c;不代表就是正确答案&#xff01;&#xff01;&#xff01; 9.什么是泛化误差和经验误差&#xff0c;是不是越小越好?为什么? 经验误差指的是模型在训练数据集上的误差&#xff0c;而泛化误差…