设计模式 - 命令模式

设计模式 - 命令模式

ID:40316778

大小:404.50 KB

页数:9页

时间:2019-07-31

设计模式 - 命令模式_第1页
设计模式 - 命令模式_第2页
设计模式 - 命令模式_第3页
设计模式 - 命令模式_第4页
设计模式 - 命令模式_第5页
资源描述:

《设计模式 - 命令模式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、设计模式读书笔记-----命令模式在开发过程中,我可能会需要向某些对象发送一些请求,但是我们不知请求的具体接收者是谁,也不知道被请求的操作是那个,我们只知道在程序运行中指定具体的请求接收者即可。打个比方,电视遥控器,我们只需要知道按那个按钮能够打开电视、关闭电视和换台即可,并不需要知道是怎么开电视、关电视和换台的。对于这种情况,我们可以采用命令模式来进行设计。一、基本定义命令模式将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式支持可撤销的操作。命令模式可以对发送者额接受者完全解耦,发送者也接收者之间并没有直接的联系,发送者只需要知道如何发送请

2、求,不需要关心请求是如何完成了。这就是命令模式,命令模式将方法调用给封装起来了。二、模式结构从上图可以看出命令模式包含如下几个角色:Command:抽象命令类ConcreteCommand:具体命令类Invoker:调用者Receiver:接收者Client:客户类命令模式的本质就在于将命令进行封装,将发出命令的责任和执行命令的责任分开,是的发送者只需要知道如何发送命令即可,不需要命令是如何实现的,甚至命令执行是否成功都不需要理会。同时命令模式使得请求也变成了一个对象,它像其他对象一样可以被存储和传递。三、模式实现这里以电视机为例。电视剧是请求的接受者,遥控器是请求的发

3、送者,遥控器上有一些按钮,不同的按钮对应着不同的操作。在这里遥控器需要执行三个命令:打开电视机、关闭电视机、换台。UML图:代码的实现抽象命令类:Command.java1/**2*Command命令接口,为所有的命令声明一个接口。所有的命令都应该实现它3*/4publicinterfaceCommand{5publicvoidexecute();6}电视机类:Television.java1publicclassTelevision{2publicvoidopen(){3System.out.println("打开电视机......");4}56publicvoidc

4、lose(){7System.out.println("关闭电视机......");8}910publicvoidchangeChannel(){1112System.out.println("切换电视频道......");13}14}遥控器类:Controller.java1publicclassController{2privateCommandopenTVCommand;3privateCommandcloseTVCommand;4privateCommandchangeChannelCommand;56publicController(CommandopenTv

5、Command,CommandcloseTvCommand,CommandchangeChannelCommand){7this.openTVCommand=openTvCommand;8this.closeTVCommand=closeTvCommand;9this.changeChannelCommand=changeChannelCommand;10}1112/**13*打开电视剧14*/15publicvoidopen(){16openTVCommand.execute();17}1819/**20*关闭电视机21*/22publicvoidclose(){23

6、closeTVCommand.execute();24}2526/**27*换频道28*/29publicvoidchange(){3031changeChannelCommand.execute();32}3334}遥控器的三个按钮1publicclassOpenTvCommandimplementsCommand{2privateTelevisiontv;34publicOpenTvCommand(){5tv=newTelevision();6}78publicvoidexecute(){9tv.open();10}1112}1publicclassChangeCh

7、annelCommandimplementsCommand{2privateTelevisiontv;34publicChangeChannelCommand(){5tv=newTelevision();6}78publicvoidexecute(){9tv.changeChannel();10}1112}1publicclassCloseTvCommandimplementsCommand{2privateTelevisiontv;34publicCloseTvCommand(){5tv=newTelevision();6}78publ

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。