设计模式之命令模式
2016-05-25 20:55
225 查看
命令模式
定义:命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。代码:(以录音机为例)
录音机类:具体方法实现
public class AudioPlayer { public void play(){ System.out.println("播放..."); } public void rewind(){ System.out.println("倒带..."); } public void stop(){ System.out.println("停止..."); } }
命令接口:
public interface Command { /** * 执行方法 */ public void execute(); }
具体命令实现:等等
public class PlayCommand implements Command { private AudioPlayer myAudio; public PlayCommand(AudioPlayer audioPlayer){ myAudio = audioPlayer; } /** * 执行方法 */ @Override public void execute() { myAudio.play(); } } 。。。。。
宏命令接口:
public interface MacroCommand extends Command { /** * 宏命令聚集的管理方法 * 可以添加一个成员命令 */ public void add(Command cmd); /** * 宏命令聚集的管理方法 * 可以删除一个成员命令 */ public void remove(Command cmd); }
宏命令接口实现:
public class MacroAudioCommand implements MacroCommand { private List<Command> commandList = new ArrayList<Command>(); /** * 宏命令聚集管理方法 */ @Override public void add(Command cmd) { commandList.add(cmd); } /** * 宏命令聚集管理方法 */ @Override public void remove(Command cmd) { commandList.remove(cmd); } /** * 执行方法 */ @Override public void execute() { for(Command cmd : commandList){ cmd.execute(); } } }
键盘类:
public class Keypad { private Command playCommand; private Command rewindCommand; private Command stopCommand; public void setPlayCommand(Command playCommand) { this.playCommand = playCommand; } public void setRewindCommand(Command rewindCommand) { this.rewindCommand = rewindCommand; } public void setStopCommand(Command stopCommand) { this.stopCommand = stopCommand; } /** * 执行播放方法 */ public void play(){ playCommand.execute(); } /** * 执行倒带方法 */ public void rewind(){ rewindCommand.execute(); } /** * 执行播放方法 */ public void stop(){ stopCommand.execute(); } }
客户端:
public class Julia { public static void main(String[]args){ //创建接收者对象 AudioPlayer audioPlayer = new AudioPlayer(); //创建命令对象 Command playCommand = new PlayCommand(audioPlayer); Command rewindCommand = new RewindCommand(audioPlayer); Command stopCommand = new StopCommand(audioPlayer); MacroCommand marco = new MacroAudioCommand(); marco.add(playCommand); marco.add(rewindCommand); marco.add(stopCommand); marco.execute(); } }
结构:
作用:
(1)命令模式使新的命令很容易地被加入到系统里。
(2)允许接收请求的一方决定是否要否决请求。
(3)能较容易地设计一个命令队列。
(4)可以容易地实现对请求的撤销和恢复。
(5)在需要的情况下,可以较容易地将命令记入日志。
相关文章推荐
- XML解析
- CSS绘图:尾巴
- FAST算法小结
- linux网络管理三剑客
- Sprint回顾
- CodeForce 651 A Joysticks
- POJ 3268 Silver Cow Party (迪杰斯特拉)
- Python3 迭代器与生成器
- Android-分辨率以及dip(dp)、dpi、ppi、px、sp、pt说明
- 手把手教学 git
- godep 包管理工具
- HDU 5444 Elven Postman
- C++作业6
- codefoeces 414A (构造)
- 23种设计模式(10):命令模式
- 关系型数据库和非关系型数据库
- 提交表单用ajax判断登录正确并跳转页面的方法
- 动态存储分配及深复制 —我的数组类
- 解决Deprecated: preg_replace(): The /e modifier is deprecated, use
- 用css3选择器给你要的第几个元素添加不同样式方法【转发】