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.还是老套路 ...
随机推荐
- linux开机启动smb服务
修改/etc/rc.local文件(增加红色部分) [root@localhost ~]# cat /etc/rc.local #!/bin/sh## This script will be exec ...
- GitBash学习1
昨晚学了一点GitBash,建立库,向库里添加文件,对比修改的内容等等. 自己做了以下总结 git mkdir <dirname> //建立文件 git cd <dirname> ...
- AngularJS数据双向绑定
<body ng-app> <div ng-controller="myCtrl"> <input ng-model="abc" ...
- Java程序性能优化-读书笔记(一) 单例模式
单例模式: 目的: 确保系统中一个类只产生一个实例. 好处: 1.对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销. 2.由于new操作的次数减少, ...
- Visual Studio 2017离线安装包下载、安装
1. 首先下载在线安装exe,官网地址https://www.visualstudio.com/zh-hans/downloads/ 2. 运行CMD, 执行脚本 vs_enterprise.exe ...
- JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue
前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的 ...
- Linux 内核综述
一.什么是Linux内核: 内核->操作系统中最重要的部分,内核将在系统引导时被装载进RAM,其中包含了很多关键的例程,以操作系统.内核是OS最为关键的部分,人们常将OS(操作系统)与内核等同. ...
- hasOwnProperty的用法
判断一个属性倒底是在原型中,还是在实例中 hasOwnProperty() 来个栗子 function Person(){ }; Person.prototype.name = "hezhi ...
- java 文件的编码 问题
package com.io; public class Encodedemo { public static void main(String[] args)throws Exception{ // ...
- 优化js脚本设计,防止浏览器假死
在Web开发的时候经常会遇到浏览器不响应事件进入假死状态,甚至弹出"脚本运行时间过长"的提示框,如果出现这种情况说明你的脚本已经失控了,必须进行优化. 为什么会出现这种情况呢,我们 ...