COMMAND
Command 模式非常简单,只有一个具有唯一方法的接口组成。
public interface ICommand {
public void execute();
}
1 一般的Command模式
CommandMaster中绑定要执行的Command,只要Command监测到一个事件,它只要调用相应的Command执行即可,它无需指导要做什么事情。
<!--[if gte vml 1]><v:shapetype
id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter" />
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0" />
<v:f eqn="sum @0 1 0" />
<v:f eqn="sum 0 0 @1" />
<v:f eqn="prod @2 1 2" />
<v:f eqn="prod @3 21600 pixelWidth" />
<v:f eqn="prod @3 21600 pixelHeight" />
<v:f eqn="sum @0 0 1" />
<v:f eqn="prod @6 1 2" />
<v:f eqn="prod @7 21600 pixelWidth" />
<v:f eqn="sum @8 21600 0" />
<v:f eqn="prod @7 21600 pixelHeight" />
<v:f eqn="sum @10 21600 0" />
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" />
<o:lock v:ext="edit" aspectratio="t" />
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:387pt;
height:210pt'>
<v:imagedata xsrc="file:///C:\DOCUME~1\money\LOCALS~1\Temp\msohtml1\01\clip_image001.jpg" mce_src="file:///C:\DOCUME~1\money\LOCALS~1\Temp\msohtml1\01\clip_image001.jpg"
o:title="uml.command1" />
</v:shape><![endif]--><!--[if !vml]-->
public class CommandMaster {
Map<String, ICommand> map = new HashMap<String, ICommand>();
public void init() {
map.put("alarm", new AlarmCommand());
map.put("autobackup", new AutoBackupCommand());
}
public void execute(String key) {
ICommand c = map.get(key);
if (c != null) {
c.execute();
}
}
}
2 事务操作
接口ITransaction中,validate进行验证工作,execute是要执行的任务。在CreateEmsUserTransaction中,先用validate方法进行输入数据的有效性验证,验证其是否符合创建EMS User的条件,验证通过后,利用execute方法创建EMSUser.
优点:
1 把验证和执行的代码分离到CreateEmsUserTransaction类中,从实体上解除了该代码和获取数据的接口之间的耦合。
2 可以把通过验证的事务存在一起,在某个特定的时间统一执行,例如: 某数据库只有零点以后可以更新。
3 支持UNDO操作
public interface ICommand {
public void do(); //这个名字在java里面用不了
public void undo();
}
undo的代码几乎与do的代码一致,这样就可以很容易的实现某个操作的undo功能。
ACTIVE OBJECT
该模式使用Command模式来为系统提供一个简单的多任务核心。
public class ActiveObject {
private LinkedList<ICommand> commands = new LinkedList<ICommand>();
public void add(ICommand command) {
commands.add(command);
}
public void run() {
while (!commands.isEmpty()) {
ICommand cmd = commands.getFirst();
commands.removeFirst();
cmd.execute();
}
}
}
cmd.execute()中可以将其他的需要执行的ICommand放入commands中,这样run会一直执行下去。
当然也可以在ActiveObject加入多进程机制,是加入的Command自动执行。
COMPOSITE
在Command模式中,如果某个操作需要的不是一个Command,而是一组Command的执行结果,这时,就要维护一组Command的列表,需要更改CommandMaster的add()方法和run()方法,而且不利于后期的维护工作。这是可以使用Composite模式,使CommandMaster以对待一个Command的方式去对待一组Command.
<!--[if gte vml 1]><v:shape
id="_x0000_i1027" type="#_x0000_t75" style='width:321.75pt;height:209.25pt'>
<v:imagedata xsrc="file:///C:\DOCUME~1\money\LOCALS~1\Temp\msohtml1\01\clip_image004.png" mce_src="file:///C:\DOCUME~1\money\LOCALS~1\Temp\msohtml1\01\clip_image004.png"
o:title="" />
</v:shape><![endif]--><!--[if !vml]-->
<!--[endif]-->
public class CompositeCommand implements ICommand {
private List<ICommand> commands = new ArrayList<ICommand>();
public void execute() {
for (ICommand command : commands) {
command.execute();
}
}
public void add(ICommand command) {
commands.add(command);
}
}
对系统来说,CompositeCommand就像一个单一的Command,它表现的就像一个Command,只不过它是一组Command的代理。
使用Composite模式可以使系统一对多关系转化为一对一关系,可以更有利于理解和维护。但它并不能使得所有的一对多关系都转化为一对一,只有以一致的方式对待列表中的每一个对象的情况下才可以使用。
<!--[endif]-->
分享到:
相关推荐
Jabra捷波朗Elite 7 Active是一款专为运动爱好者设计的高级真无线蓝牙耳机,具有ShakeGrip技术,提供稳固的佩戴体验,适合在各种活动中使用。它具备IP57级别的防汗保护,能够抵御汗水和雨水,确保在运动过程中不受...
根据提供的文件信息,文件标题为“***-中金公司-宋城演艺-300144-演艺龙头护城河稳固,新模式下增长可期.pdf”,描述也是同样的内容。文件标签为“行业”,说明该文件可能与演艺行业的市场分析、企业分析或者行业...
Jabra捷波朗Elite 4 Active是一款专为运动爱好者设计的无线蓝牙耳机,以其稳固的佩戴感和出色的音质受到用户的喜爱。本用户手册详细介绍了这款产品的使用方法、功能特点以及保养维护,旨在帮助用户更好地理解和操作...
"提高人行道透水砖铺装平整度稳固性试验合格率" 本文总结了提高人行道透水砖铺装平整度稳固性试验合格率的相关知识点。通过对人行道透水砖铺装平整度稳固性试验合格率的分析和研究,得出了提高人行道透水砖铺装平整...
* 紧凑舒适:新的、更小的设计,经测试可稳固贴合 * 优质通话:四麦克风技术保证出色的通话质量 * 长时间使用:耳塞式耳机使用时间长达 5.5 小时,搭配小巧充电盒总计可达 24 小时(主动降噪开启) * 可自定义均衡器...
报告中提到的“本地商业王国根基稳固,生态价值有望迎来新增长”是指美团作为中国领先的在线和本地生活服务平台,通过整合用户生活场景中的多种服务,巩固了其业务基础并促进了生态系统的价值增长。报告中还提到了...
20210527-广发证券-百润股份-002568-行业有望迎来新一轮较快增长,公司龙头地位稳固.pdf
新能源汽车行业在2022年5月的表现呈现了明显的复苏态势...未来,随着全球范围内的碳减排目标不断强化,新能源汽车行业将继续保持强劲的增长势头,而那些能够不断创新、适应市场变化的公司将有望在竞争中占据主导地位。
这种稳固结构的钻孔平台施工方法可能引入了新的设计理念或技术,如模块化设计、智能监测系统等,以提升施工效率和安全性。具体创新点需参考“一种稳固结构及基于该稳固结构的钻孔平台施工方法.pdf”文件中的详细内容...
电气设备行业新能源车月度观察报告中涉及了多项与新能源汽车行业相关的重要知识点,以下是根据报告内容整理的知识点详细说明。 1. 新能源汽车行业装机量增长: 报告指出,2019年1月份,动力电池装机量达到4.98GWh,...
我国机床市场大而不强,机床产值、机床消费额均位列世界首位,而机床数控化率较低、高端机床依赖进口的问题仍然存在,中低端产品竞争较为充分,而高端机床依赖进口。工业母机是工业现代化的基石,是国家制造业战略...
在通信行业中,设备的稳定性与安全性至关重要,而“水杯稳固托盘”这一设计就是针对这一需求而诞生的。它旨在为工作人员提供一个安全、方便的放置水杯的平台,确保在工作过程中避免因水杯倾倒引发的意外,从而保证...
煎烤器的设计与构造对于烹饪效果和安全使用至关重要,而这种结构稳固的煎烤器无疑为用户提供了更加优质的烹饪体验。 首先,煎烤器的结构稳固性体现在其基础框架上。一个坚固的框架可以确保设备在烹饪过程中不会因...
中信建投-中国银河(601881)网点触达能力稳固,全新战略有望加速业务短板补强-230529.pdf
消防柜1的前端设有活动门,方便取用消防器材,而左右两侧后端中部则设有固定块9,这是连接稳固装置的关键部位。 稳固装置的设计考虑了多方面的稳固措施。左固定板4和右固定板3通过合页13安装在稳固板2的前壁两侧,...
新能源车:5月销量逐步复苏,龙头公司地位稳固.pdf
食品饮料行业深度报告:双十一电商渠道分析,龙头优势稳固,细分领域新品牌异军突起-开源证券-20201116.pdf
标题“联想集团-0992.HK-PC优势稳固,智能化转型带来成长新动能”揭示了联想集团在个人计算机(PC)市场的领先地位以及其正在经历的业务转型,旨在通过智能化战略寻找新的增长动力。这个标题暗示了两方面的关键知识...
《C安全编码标准:开发安全、可靠、稳固系统的98条规则》是针对C语言编程者的一本权威指南,旨在帮助开发者遵循最佳实践,避免常见的编程陷阱,从而编写出更安全、更稳定、更高效的代码。以下是根据书名和描述所提炼...
在本压缩包“行业文档-设计装置-一种结构稳固魔方.zip”中,主要包含了一份名为“一种结构稳固魔方.pdf”的文档,该文档详细介绍了关于设计一款结构稳固的魔方的相关知识。魔方,作为一种经典的智力玩具,其设计与...