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接收之后,即便请求发起者消亡,也不会影响该请求的执行。
本章涉及到的新设计原则
依赖倒置原则:尽量依赖于抽象编程,而不是具体实现
命令模式在日志,队列的应用,后续追加......
如有错误,请指出,大家共同学习
如转载,请说明出处
Head First 设计模式 第6章 命令模式的更多相关文章
- 设计模式之第14章-命令模式(Java实现)
设计模式之第14章-命令模式(Java实现) “小明,滚出去.”“小明,这个问题怎么做?”(可怜的小明无奈躺枪.小明:老师,我和你有什么仇什么怨,我和你有什么仇什么怨啊到底...老师:小明,滚出去.习 ...
- 第14章 命令模式(Command Pattern)
原文 第14章 命令模式(Command Pattern) 命令模式(Command Pattern) 概述 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”.但在某些场合,比如 ...
- javascript设计模式详解之命令模式
每种设计模式的出现都是为了弥补语言在某方面的不足,解决特定环境下的问题.思想是相通的.只不过不同的设计语言有其特定的实现.对javascript这种动态语言来说,弱类型的特性,与生俱来的多态性,导致某 ...
- Java设计模式(22)命令模式(Command模式)
Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用.Command模式实际上不是个很具体 ...
- C#设计模式之11:命令模式
C#设计模式之11:命令模式 命令模式 命令模式用来解决一些复杂业务逻辑的时候会很有用,比如,你的一个方法中到处充斥着if else 这种结构的时候,用命令模式来解决这种问题就会让事情变得简单很多. ...
- 第 12 章 命令模式【Command Pattern】
以下内容出自:<<24种设计模式介绍与6大设计原则>> 今天讲命令模式,这个模式从名字上看就很简单,命令嘛,老大发命令,小兵执行就是了,确实是这个意思,但是更深化了,用模式来描 ...
- Head First 设计模式 第4章工厂模式
第4章 工厂模式 在介绍工厂模式之前,先让我们来看一个例子. 这里有一个Pizza类,用来生产pizza,并返回对象,具体代码如下: package com.ek.factory.simple; im ...
- C#设计模式之十五命令模式(Command Pattern)【行为型】
一.引言 今天我们开始讲"行为型"设计模式的第二个模式,该模式是[命令模式],又称为行动(Action)模式或交易(Transaction)模式,英文名称是:Command P ...
- C#设计模式之十四命令模式(Command Pattern)【行为型】
一.引言 今天我们开始讲“行为型”设计模式的第二个模式,该模式是[命令模式],又称为行动(Action)模式或交易(Transaction)模式,英文名称是:Command Pattern.还是老套路 ...
随机推荐
- Array.apply(null,{length:20})与new Array(20)的区别
Array.apply(null,{length:20}) 这句代码的实际意义:创建长度为20的一个数组,但并非空数组. 跟new Array(20)的区别在于,前一种创建方式,得到的数组中的每一个元 ...
- maven下配置pom.xml
博主原创,转载请注明. 遇到的问题: 缺少依赖库.解决办法: 在build标签中添加: <plugin> <groupId>org.apache.maven.plugins&l ...
- java中打印输出数组
import java.util.Arrays; public class ArrayDemo { public static void main(String[] args) { int size ...
- php实现人员的权限管理
权限是指不同的人员登录以后会用不同的页面. 一.想好这个权限是什么? 肯定要有用户表.还有用户所用的角色.然后就是权限功能表:可是在这里面有关联也就 是会另外有两张相互关联的表,这样也就是5张表 在数 ...
- Linux内核互斥锁--mutex
一.定义: /linux/include/linux/mutex.h 二.作用及访问规则: 互斥锁主要用于实现内核中的互斥访问功能.内核互斥锁是在原子 API 之上实现的,但这对于内核用户是不可见 ...
- 基于REM的移动端响应式适配方案
视口 在前一段时间,我曾经写过一篇关于viewport的文章.最近由于在接触移动端开发,对viewport有了新的理解.于是,打算重新写一篇文章,介绍移动端视口的相关概念. 关于这篇文章说到的所有知识 ...
- 数位DP练习
水题 发布时间: 2017年6月22日 19:15 最后更新: 2017年6月23日 20:10 时间限制: 1000ms 内存限制: 128M 描述 给一个数n,求0~n内有多少个数满足 ...
- 《Java编程思想》第一二章
前段时间一直通过网络教程学习Java基础,把面向对象部分学完之后本来打算继续深入学习,但是感觉自己操之过急了,基础根本不够扎实,所以入手了一本<Java编程思想>,希望先把基础打好,再深入 ...
- 如何将notMNIST转成MNIST格式
相信了解机器学习的对MNIST不会陌生,Google的工程师Yaroslav Bulatov 创建了notMNIST,它和MNIST类似,图像28x28,也有10个Label(A-J). 在Tenso ...
- doPost或doGet调用出错(状态代码为405) : HTTP method GET is not supported by this URL
最近做servlet发现了个问题,解决办法记下来: Servlet eroor:HTTP method GET is not supported by this URL 错误提示: type: St ...