zoukankan      html  css  js  c++  java
  • Head First 设计模式 第6章 命令模式

    第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接收之后,即便请求发起者消亡,也不会影响该请求的执行。

      本章涉及到的新设计原则

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

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

     

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

    如转载,请说明出处

     

  • 相关阅读:
    javascript 备忘 细节 相关
    内存泄漏
    css相关 细节 优化 备忘
    nodeType
    事件冒泡 模型
    两个感叹号作用
    非冒泡事件
    DOM 对象
    Quartz2D 之 绘制文本
    Voilin 与 乐谱
  • 原文地址:https://www.cnblogs.com/edi-kai/p/4795010.html
Copyright © 2011-2022 走看看