第6章 命令模式

  在本章,我们将把封装带到一个全新的境界,把方法调用封装起来。没错,通过方法调用,我们可以把运算块包装成型。所以,调用此运算的对象不需要关心运算是如何进行的,只要知道如何使用包装成型的方法来完成它就可以。通过封装方法调用,我们还可役做一些其他很重要的事情,例如记录日志,或者重复使用封装来实现撤销操作。

  首先,让我们来看下命令模式吧。

  1丶定义:将“请求”封装成对象,以便使用不同的请求,日志或者队列来参数化其他对象,由其他对象来完成“请求”的实际调用,以达到请求的发起者和执行者之间的解偶。

  说一个命令模式的经典介绍场景吧,那就是遥控器控制电器(此处以风扇来介绍)。我们的遥控器可以打开(on)关闭(off)风扇,或者为风扇换档(1 2 3)。那么,在命令模式中是怎么实现的呢?

  首先,看一下在这个打开风扇这个过程中,都经过了哪些动作。

    1)小明拿起遥控器按下“on”按钮;

    2)遥控器接收到“on”按钮按下操作,然后将这个信号发送给风扇;

    3)风扇接受到遥控器发送的信号后,打开风扇。

  我们来分解下在这些动作中都有那些角色,进行了那些操作。

    Client-小明:发起请求(按下“on”按钮)

    Command-信号:信号会被角色传递

    Invoker-遥控器:接收信号,并把信号(Command)发送给风扇

    Receiver-风扇:按照请求,打开风扇。

  解释下命令模式的流程,就是,Client发起请求,然后把请求封装成命令对象(Command),Invoker会接收命令对象,然后执行命令,Invoker执行命令会调用Receiver的方法来完成Client的请求。对应的类图如下:  

  通过这种方式,我们就实现了请求的发起者(CLient)和执行者(Receiver)的解偶了。我请求发起之后,由调用者Invoker接收之后,即便请求发起者消亡,也不会影响该请求的执行。

  本章涉及到的新设计原则

    依赖倒置原则:尽量依赖于抽象编程,而不是具体实现

  命令模式在日志,队列的应用,后续追加......

 

如有错误,请指出,大家共同学习

如转载,请说明出处

Head First 设计模式 第6章 命令模式的更多相关文章

  1. 设计模式之第14章-命令模式(Java实现)

    设计模式之第14章-命令模式(Java实现) “小明,滚出去.”“小明,这个问题怎么做?”(可怜的小明无奈躺枪.小明:老师,我和你有什么仇什么怨,我和你有什么仇什么怨啊到底...老师:小明,滚出去.习 ...

  2. 第14章 命令模式(Command Pattern)

    原文 第14章 命令模式(Command Pattern) 命令模式(Command Pattern) 概述   在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”.但在某些场合,比如 ...

  3. javascript设计模式详解之命令模式

    每种设计模式的出现都是为了弥补语言在某方面的不足,解决特定环境下的问题.思想是相通的.只不过不同的设计语言有其特定的实现.对javascript这种动态语言来说,弱类型的特性,与生俱来的多态性,导致某 ...

  4. Java设计模式(22)命令模式(Command模式)

    Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用.Command模式实际上不是个很具体 ...

  5. C#设计模式之11:命令模式

    C#设计模式之11:命令模式 命令模式 命令模式用来解决一些复杂业务逻辑的时候会很有用,比如,你的一个方法中到处充斥着if else 这种结构的时候,用命令模式来解决这种问题就会让事情变得简单很多. ...

  6. 第 12 章 命令模式【Command Pattern】

    以下内容出自:<<24种设计模式介绍与6大设计原则>> 今天讲命令模式,这个模式从名字上看就很简单,命令嘛,老大发命令,小兵执行就是了,确实是这个意思,但是更深化了,用模式来描 ...

  7. Head First 设计模式 第4章工厂模式

    第4章 工厂模式 在介绍工厂模式之前,先让我们来看一个例子. 这里有一个Pizza类,用来生产pizza,并返回对象,具体代码如下: package com.ek.factory.simple; im ...

  8. C#设计模式之十五命令模式(Command Pattern)【行为型】

    一.引言   今天我们开始讲"行为型"设计模式的第二个模式,该模式是[命令模式],又称为行动(Action)模式或交易(Transaction)模式,英文名称是:Command P ...

  9. C#设计模式之十四命令模式(Command Pattern)【行为型】

    一.引言 今天我们开始讲“行为型”设计模式的第二个模式,该模式是[命令模式],又称为行动(Action)模式或交易(Transaction)模式,英文名称是:Command Pattern.还是老套路 ...

随机推荐

  1. Swift组合逻辑

    我们可以组合多个逻辑运算来表达一个复合逻辑: if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverride ...

  2. [leetcode-521-Longest Uncommon Subsequence I]

    Given a group of two strings, you need to find the longest uncommon subsequence of this group of two ...

  3. Chapter 3. Video Coding Concepts

    本章主要介绍一些有关视频编码的概念 时域模型(Temporal Model) 时域模型的作用是去除帧间冗余.如:将第二帧减去第一帧,得到的剩余信息,其能量会远小于第二帧本身. 基于块的运动估计和补偿 ...

  4. JAVA基础——内部类详解

    JAVA内部类详解 在我的另一篇java三大特性的封装中讲到java内部类的简单概要,这里将详细深入了解java内部类的使用和应用. 我们知道内部类可分为以下几种: 成员内部类 静态内部类 方法内部类 ...

  5. Python序列类型

    Python序列类型 序列:字符.列表.元组 所有序列都支持迭代 序列表示索引为非负整数的有序对象集合 字符和元组属于不可变序列,列表可变 1)字符 字符串字面量:把文本放入单引号.双引号或三引号中: ...

  6. C# selecd,new,virtual,abstract与override

    本文大部分内容摘自  <.NET开发专家·亮剑.NET : .NET深入体验与实战精要> 博主只是搬运工,不喜勿喷. 关于虚方法,抽象类这一部分一直不是太清楚,目前的工作中也接触不到这些. ...

  7. android源码、博文2

      每周精选 第 54 期   精品源码 仿网易新闻app下拉标签选择菜单     仿网易新闻app下拉标签选择菜单,长按拖动排序,点击增删标签控件##示例 https://github.com/we ...

  8. BottomupSort算法 c++代码实现

    #include <iostream> using namespace std; #define N 100 int A[N]; static int n; void Initial() ...

  9. 基于PlatinumKit库的DLNA服务端开发

    首先,需要特别感谢蓝斯老师的资料,我这里有很大一部分是参考蓝斯老师的,附上传送门:http://blog.csdn.net/lancees/article/details/9178385 一.DLNA ...

  10. JS实现悬浮导航的制作--web前端

    思想:导航在这里只有两种状态,一种是初始状态.一种是固定布局状态.实现悬浮导航其实就是通过Javascript脚本语言控制导航的两种状态,主要是对两种状态成立条件的判断,明确了这些,实现起来就不会太难 ...