概念
在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式(Command Pattern)
关系图:
看下命令模式是有哪些角色来组成的吧。
- 1)命令角色(Command):声明执行操作的接口。有java接口或者抽象类来实现。
- 2)具体命令角色(ConcreteCommand):将一个接收者对象绑定于一个动作;调用接收者相应的操作,以实现命令角色声明的执行操作的接口。
- 3)客户角色(Client):创建一个具体命令对象(并可以设定它的接收者)。
- 4)请求者角色(Invoker):调用命令对象执行这个请求。
- 5)接收者角色(Receiver):知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。
代码小例子
物联网是未来一个卖点之一,实现物联网以后,我们可以随便遥控家里电器的情况,在这里,设计一个遥控器,具有遥控电视和洗衣机的功能。当然,你也可以添加很多遥控其他电器的功能,如果要编写这么一个类,如何更好的实现解耦呢?命令模式是个不错的选择:
首先:先建立一个Command接口:
再者,得有电视和洗衣机,才可以遥控:
实现ConcreteCommand(具体的Command):
最后,实现遥控器类:
看一下,遥控器只是把command传出去,而它丝毫不关心打开和关闭电器是如何实现的,就这样实现了解耦。
测试类:
测试结果:
打开电视
关闭电视
打开洗衣机
关闭洗衣机
想想一下,往后,如果我们在遥控器想加入遥控电风扇、空调、冰箱等等功能是不是特别清晰。
模式优点
1.降低系统的耦合度。
2.新的命令可以很容易地加入到系统中。
3.可以比较容易地设计一个组合命令。
模式缺点
使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用。适用环境
1.系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。
2.系统需要在不同的时间指定请求、将请求排队和执行请求。
3.系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作。
4.系统需要将一组操作组合在一起,即支持宏命令。
分享到:
相关推荐
浅学RC充放电电路
浅学电子幸运大转盘知识
前言 使用过Vue和React的小伙伴肯定对虚拟Dom和diff算法很熟悉,它扮演着很重要的角色。由于小编接触Vue比较多,React只是浅学,所以本篇主要针对Vue来展开介绍,带你... <p class=title>Hello world!</p> </div> VN
此文粗略得介绍了pascal语言,学过初级编程的容易接受
二极管,三极管,PN接
1、XML AJAX: Asynchronous Javascript And Xml 1、什么是XML eXtensible Markup Language 可扩展的 标记 语言 XML的标记没有预定义过,需要自行定义 XML的宗旨是做数据传递的,而非... $xml.="<...>"; ....
1. 这个是git上朋友发的,我这就是蹭蹭人家流量了 2. 是一个时序预测的问题的数据集 3. 每个小时一个数据,每个batch训练的数据是前一周也就是196个小时,预测的结果是下一天的数据24小时
对字节序的一些理解。
这里就是通过布局文件中Button控件的属性值onClick=”click”实行回调函数click,代表着点击按钮有click方法响应。 回调函数代码如下,首先要通过id找到对应的按钮 myBtn_one.findViewById(R.id.btn_one);...
一份相当不错的Java大学基础教程 课件中还附有源代码,浅学易懂。
非常好的教程,浅学易懂,主要是基于centos的讲解
android开发应用详解教程,是一本非常不错的电子教程,浅学易懂,适合初学上手学习!
C语言上机归类,这个是浅学C语言的好资料,不过对付计算机二级C的编程部分的考试也是错错有余的。
(7)这篇文章只是为了供一些初学者免费学习(主要是当时哥们交作业的时候没有找到类似的,就浅学了一点点内容然后做出来的,内容肯定不够充实完整),不要不要直接当大作业交上去!!! 适用读者: 学习移动终端...
以下笔者将据个人浅学, 白话一下云计算的主要概念,或许有助于您认识它。 从理念说起 伟大的革新往往源自理念的闪现,云计算的产生肯定得益于超前的、大胆的想法。翻开云 计算的历史,1961年可以视为云计算元年,这...
基于Huffman编码思路的一个测试性压缩工具,但是由于个人水平原因(浅学的业余爱好者),并没有利用到Huffman编码的树状结构特点。另,由于快开学了......so,bug还没来得及修复,开学后有时间我会再打磨一下,另,...
oclhashcat.zip
我的选课建议和升学经验 .pages