一、定义

定义:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。对请求排队或记录请求日志,以及支持可撤消的操作。

主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。

何时使用:在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。

如何解决:通过调用者调用接受者执行命令,顺序:调用者→接受者→命令。

二、结构

从命令模式的结构图可以看出,它涉及到五个角色,它们分别是:

  • 客户角色:发出一个具体的命令并确定其接受者。
  • 命令角色:声明了一个给所有具体命令类实现的抽象接口
  • 具体命令角色:定义了一个接受者和行为的弱耦合,负责调用接受者的相应方法。
  • 请求者角色:负责调用命令对象执行命令。
  • 接受者角色:负责具体行为的执行。

三、适用场景

认为是命令的地方都可以使用命令模式,比如: 1、GUI 中每一个按钮都是一条命令。 2、模拟 CMD。

四、优缺点

优点: 1、降低了系统耦合度。 2、新的命令可以很容易添加到系统中去。

缺点:使用命令模式可能会导致某些系统有过多的具体命令类。

五、实现

 /// <summary>  /// 电视机  /// </summary>  public class Television{/// <summary>  /// 模式是关闭的  /// </summary>  bool isopen = false;/// <summary>  /// 切换关闭、打开  /// </summary>  public string Switch(){if (isopen){isopen = false;return "关闭电视机";}else{isopen = true;return "打开电视机";}}}/// <summary>  /// 命令接口  /// </summary>  public interface CommandInterface{/// <summary>  /// 执行命令  /// </summary>  string Execute();}/// <summary>  /// 电视机命令对象  /// </summary>  public class TeleisionCommand : CommandInterface{/// <summary>  /// 电视机对象  /// </summary>  private Television Tv = new Television();#region CommandInterface 成员  /// <summary>  /// 执行命令  /// </summary>  public string Execute(){return Tv.Switch();}#endregion}/// <summary>  /// 控制中心  /// </summary>  public static class ControlContent{private static CommandInterface Command;public static void SetControlObjectCommand(CommandInterface cobject){Command = cobject;}public static string ExecuteControlObject(){return Command.Execute();}}class Program{static void Main(string[] args){TeleisionCommand tvcommand = new TeleisionCommand();ControlContent.SetControlObjectCommand(tvcommand);Console.WriteLine(ControlContent.ExecuteControlObject());Console.WriteLine(ControlContent.ExecuteControlObject());Console.ReadLine();}}

参考

http://wangqingpei557.blog.51cto.com/1009349/626464/

http://www.runoob.com/design-pattern/command-pattern.html

欢迎阅读本系列文章:Head First设计模式之目录

转载于:https://www.cnblogs.com/xcsn/p/7500623.html

Head First设计模式之命令模式相关推荐

  1. 设计模式 之 命令模式

    2019独角兽企业重金招聘Python工程师标准>>> 设计模式 之 命令模式 命令模式比较简单,不过多赘述 为什么需要命令模式 将"行为请求者"与"行 ...

  2. 乐在其中设计模式(C#) - 命令模式(Command Pattern)

    原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...

  3. 23种设计模式之命令模式和策略模式的区别

    文章目录 概述 命令模式 策略模式 相同点 总结 概述 命令模式和策略模式确实很相似,只是命令模式多了一个接收者(Receiver)角色.它们虽然同为行为类模式,但是两者的区别还是很明显的.策略模式的 ...

  4. 设计模式之命令模式(Command)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  5. plsql执行command命令控制台出现乱码_设计模式系列 — 命令模式

    点赞再看,养成习惯,公众号搜一搜[一角钱技术]关注更多原创技术文章.本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 23种设计模式速记 单例(sin ...

  6. 设计模式复习-命令模式

    #pragma once #include "stdafx.h" #include<set> #include<string> #include<io ...

  7. Java 设计模式之命令模式

    一.了解命令模式 1.1 什么是命令模式 命令模式将"请求"封装成对象,以便使用不同的请求.队列或者日志来参数化其他对象.命令模式也支持可撤销的操作.这种说法比较难以理解,换种说法 ...

  8. 设计模式:命令模式(Command)

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  9. 【设计模式】命令模式

    命令模式:将请求封装在对象中,客户不直接调用某个对象的方法,而是使用命令,将命令传递给拥有方法的对象从而让某一方法被调用.UML图例如以下: 以下是用C++描写的命令模式的一个简单样例: #inclu ...

  10. Android设计模式之——命令模式

    一.介绍 命令模式(Command Pattern),是行为型设计模式之一.命令模式相对于其他的设计模式来说并没有那么多的条条框框,其实它不是一个很"规范"的模式,不过,就是基于这 ...

最新文章

  1. JGG:遗传发育所白洋组和曹晓风组-水稻组蛋白甲基化调控根系核心菌群
  2. finished with exit code -1073740791 (0xC0000409)
  3. jquery1.43源码分析之工具方法
  4. android webview静态方法,android – 将静态HTML加载到Webview中
  5. [学习笔记]数字电路技术
  6. 深入探究.Net Core Configuration读取配置的优先级
  7. 5-2 Windows消息队列 (25分)
  8. vue路由异步组件案例
  9. 新手入门HTML5开发,你必须先搞懂这6个问题
  10. 20145227《Java程序设计》第10周学习总结
  11. VMWare虚拟机安装RedHat Linux全过程
  12. 方法 手写promise_实现一个符合 Promise/A+规范的 Promise(typescript 版)
  13. 这是一位拿到BAT大厂offer应届生的年终总结,那么你的呢?...
  14. 【笔记】关于OpenCV中的去畸变代码
  15. 推荐一款点阵字库生成工具/点阵生成器
  16. ad18常用快捷键可以修改吗_AD18快捷键
  17. python爬虫爬取拉勾网招聘信息
  18. 【采坑】CocosCreator 使用对象池再次创建对象创建节点时出现的某明的bug,节点使用了动作系统
  19. 基于微信小程序的毕业设计题目(22)php有声读物音频播放小程序(含开题报告、任务书、中期报告、答辩PPT、论文模板)
  20. 人体红外模块对比评测,是你的话怎么选

热门文章

  1. 请求的资源不可用html,“HTTP状态404请求的资源不可用”
  2. 工程训练大赛物流小车_27所高校参赛,第六届全国工程训练竞赛湖北赛区比赛落幕...
  3. VCSA 6.5 HA配置 之一:架构概览
  4. 数据管理(DMS):谁动了线上数据?
  5. [改善Java代码]使用CyclicBarrier让多线程齐步走
  6. bash脚本基础概念注意点
  7. linux(ubuntu) 查看系统设备信息
  8. [zencart数据采集]第二课 火车头采集简单系统配置
  9. VMware esxi在线增加Linux LVM硬盘不需重新启动
  10. IIS的变迁(IIS3, IIS4, IIS5, IIS6, IIS7)