23种设计模式+额外常用设计模式汇总 (持续更新)

麦当劳,我三期设计模式拿你举例子了,私信联系我打钱!!!

概述

  • 命令模式又称为行动(Action) 模式或交易(Transaction) 模式。
  • 命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化;对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
  • 命令模式是对命令的封装。命令模式把命令的责任和执行命令的责任分割开,委派给不同的对象。

模式结构

示意性代码

namespace 命令模式
{class Receiver{public void Action(){Console.WriteLine("操作成功!");}}abstract class Command{protected Receiver receiver;public Command(Receiver receiver){this.receiver = receiver;}abstract public void Execute();}class ConcreteCommand:Command{public ConcreteCommand(Receiver receiver) : base(receiver) { }public override void Execute(){receiver.Action();}}class Invoker{private Command command;public void SetCommand(Command command){this.command = command;}public void ExecuteCommand(){command.Execute();}    }class Program{static void Main(string[] args){Receiver r = new Receiver();Command c = new ConcreteCommand(r);Invoker i = new Invoker();i.SetCommand(c);i.ExecuteCommand();Console.Read();}}
}
  • 将请求的接收者(Receiver)放到Command的具体子类ConcreteCommand中,当请求到来时(Invoker发出Invoker消息激活Command对象),ConcreteCommand将处理请求交给Receiver对象进行处理
  • Command模式将调用操作的对象和知道如何实现该操作的对象解耦。在上面Command的结构图中,Invoker对象根本就不知道具体的是哪个对象在处理Excute操作。
  • 在Command下要增加新的处理操作对象很容易,我们可以通过创建新的继承自Command的子类来实现这一点。
  • Command模式可以和Memento模式结合起来,支持Undo的操作。

使用命令模式情况

  • 如果需要在不同的时刻指定、排列和执行请求,可以选用命令模式,把这些请求封装成为命令对象,然后实现把请求队列化
  • 如果需要支持取消操作从可以选用命令模式,通过管理命令对象,,能很容易的实现命令的恢复和重做的功能
  • 如果需要支持当系统崩溃时,能把对系统的操作功能重新执行一遍,可以选用命令模式,把这些操作功能的请求封装成命令对象,然后实现日志命令,就可以在系统恢复回来后,通过日志获取命令列表,从而重新执行一遍功能
  • 在需要事务的系统中,可以选用命令模式,命令模式提供了对事务进行建模的方法,命令模式有二个别名就是Transaction.

优点

命令允许请求的一方和接收请求的一方能够独立演化。

  • 命令模式使新的命令很容易地被加入到系统里
  • 允许接收请求的一方决定是否要否决(Veto) 请求。
  • 能较容易地设计一个命令队列。
  • 可以容易地实现对请求的Undo和Redo。
  • 在需要的情况下,可以较容易地将命令记入日志。
  • 命令模式把请求一个 操作的对象与知道怎么执行一个操作的对象分割开。
  • 命令类与其他任何别的类-样,可以修改和推广。

本质

封装请求。

实例:

麦当劳点单:

炸鸡汉堡很香,但请好好吃饭!


厨师 命令接收者

package Command_McDonald;public class Cook {public void Chicken(){System.out.println("做一份炸鸡");}public void Hamburger(){System.out.println("做一份汉堡包");}public void fries() {System.out.println("做一份薯条");}
}

命令抽象接口

package Command_McDonald;public abstract class Command {protected Cook cook_receiver;public Command(Cook cook_receiver) {this.cook_receiver = cook_receiver;}abstract public void  Excute_Command(); }

炸鸡命令,具体命令

package Command_McDonald;public class Chicken_Command extends Command {@Overridepublic void Excute_Command() {cook_receiver.Chicken();}public Chicken_Command(Cook cook_receiver) {super(cook_receiver);// TODO Auto-generated constructor stub}}
package Command_McDonald;public class Fries_Command extends Command {@Overridepublic void Excute_Command() {cook_receiver.fries();}public Fries_Command(Cook cook_receiver) {super(cook_receiver);// TODO Auto-generated constructor stub}}
package Command_McDonald;public class Hamburger_Command extends Command {@Overridepublic void Excute_Command() {cook_receiver.Hamburger();}public Hamburger_Command(Cook cook_receiver) {super(cook_receiver);// TODO Auto-generated constructor stub}
}

收银员,命令调用者

package Command_McDonald;import java.util.ArrayList;
import java.util.List;public class Cashier {private List<Command> Command_Undo = new ArrayList<Command>();public void add_Command(Command com) {Command_Undo.add(com); //增加命令}public void Undo_Command(Command com) {Command_Undo.remove(com); //移除命令}public void Notify() // 提交菜单{for(Command con:Command_Undo){con.Excute_Command();//每样告诉后厨进行制作}}
}

『设计模式』再谈麦当劳的点单模式--命令模式(Command)相关推荐

  1. 『设计模式』 又谈麦当劳的食品--组合模式(Composite)

    23种设计模式+额外常用设计模式汇总 (持续更新) 我又又又谈了一期麦当劳,麦当劳看到了记得打钱

  2. 『设计模式』再谈Macdonald的汉堡口味--策略模式

    23种设计模式+额外常用设计模式汇总 (持续更新) 类的划分原则 面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类. 策略模式 1.定 ...

  3. 『设计模式』小伙你的穿搭很潮!--装饰者模式

    23种设计模式+额外常用设计模式汇总 (持续更新) 装饰模式(Decorator):又名包装模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式常常被称为包裹模式,就 ...

  4. 『原创』再谈用 php 实现域名 whois 信息查询

    之前为了做 <plog.cn 1-6位 超期待删 短域名 筛查工具>,特地在 plog.cn 服务器上部署了一个 whois 查询小工具.PS:使用方法 http://plog.cn/wh ...

  5. 设计模式-行为型模式-命令模式

    设计模式-行为型模式-命令模式 基础 以一个MIS系统为栗子 MIS 管理信息系统(Management Information System,MIS)是一个以人为主导的,利用计算机硬件.软件和网络设 ...

  6. 备忘录模式 命令模式_备忘录设计模式示例

    备忘录模式 命令模式 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重 ...

  7. 《设计模式详解》行为型模式 - 命令模式

    命令模式 6.3 命令模式 6.3.1 概述 6.3.2 结构 6.3.3 案例实现 6.3.4 优缺点 6.3.5 使用场景 6.3.6 JDK 源码 - Runnable 完整的笔记目录:< ...

  8. 『设计模式』之小试牛刀

    为了更好的学习设计模式,以及督促自己完成设计模式的学习,现提笔为记. 怎么的,每周至少也要学一个设计模式!!! 恳请大家的监督和不吝赐教,共同学习和进步! 内容主要参考自<设计模式之禅>以 ...

  9. 『设计模式』HR:不会设计模式,你好意思来面试?(面试必备设计模式)

    23种设计模式+额外常用设计模式汇总 (持续更新) 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一 ...

最新文章

  1. 解决Maven项目pom.xml文件报xxx\target\classes\META-INF\MANIFEST.MF (系统找不到指定的路径。)问题...
  2. ubuntu vscode上使用cmake、编译、调试
  3. 全球科技界最鼓舞人心领袖揭晓!马斯克第一,马云第五
  4. 线程并发库和线程池的作用_线程和并发介绍
  5. 《Jquery实战》第3版:译者序 Frank Xu Lei
  6. 12个很棒的Pandas和NumPy函数,让python数据分析事半功倍
  7. python int转str_用Python生成抖音字符视频!
  8. Android使用的工具类
  9. 福布斯评最佳与最差老板 TCL上黑榜
  10. windows bat命令启动python程序
  11. 科特斯matlab求积公式,牛顿科特斯求积公式.ppt
  12. 微信公众号使用:在微信公众号文章中嵌入小程序的方法
  13. (CVPR 2019) PointRCNN: 3D Object Proposal Generation and Detection From Point Cloud
  14. 技术经理、架构师、技术总监、VP、CTO,这些岗位都是如何挣出来
  15. 程序员自曝接私活:10个月时间接了30多个单子,纯收入40万
  16. AlertManager告警的单独使用及prometheus配置告警规则使用
  17. [android] 运行编译报错:Entry name ‘assets/Icoxx.png‘ collided
  18. 什么是web app
  19. 保险丝的作用,参数及选型应用,你真的懂了吗——电子元器件篇
  20. Tracert命令 路由跟踪数据包解析

热门文章

  1. map的extract 是更换 map 的键而不重分配的唯一方式:
  2. Android开发之EditText限制输入中文以及字数长度限制的标准姿势
  3. Android中TextView中string的特殊符号显示的方法
  4. 声明式事务基于注解@Transactional的理解
  5. Java5:BigInteger、BigDecimal详解
  6. jQuery 3.0 的 setter/getter 模式
  7. jquery表单数据反序列化为字典
  8. 关注信息安全认证培训
  9. ext的另一个table布局的例子
  10. Ext FormPanel布局 (一行显示两对控件元素)