命令模式
来源:互联网 发布:找谱子的软件 编辑:程序博客网 时间:2024/06/05 21:05
命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
Structure
- 客户端(Client)角色:创建一个具体命令(ConcreteCommand)对象并确定其接收者。
- 命令(Command)角色:声明了一个给所有具体命令类的抽象接口。
- 具体命令(ConcreteCommand)角色:定义一个接收者和行为之间的弱耦合;实现execute()方法,负责调用接收者的相应操作。execute()方法通常叫做执行方法。
- 请求者(Invoker)角色:负责调用命令对象执行请求,相关的方法叫做行动方法。
- 接收者(Receiver)角色:负责具体实施和执行一个请求。任何一个类都可以成为接收者,实施和执行请求的方法叫做行动方法。
Basic Framework
television.java
package Command_Pattern;public class television { //接受者类(电视机) public void open(){ System.out.println("打开电视机!"); } public void close(){ System.out.println("关闭电视机!"); } public void changeChannel(){ System.out.println("切换电视频道!"); }}
abstractCommand.java
package Command_Pattern;public interface abstractCommand { //抽象命令类 public void execute();}
tvOpenCommand.java
package Command_Pattern;public class tvOpenCommand implements abstractCommand { //具体命令类(打开命令) private television tv; public tvOpenCommand(){ tv = new television(); } public void execute() { tv.open(); }}
tvCloseCommand.java
package Command_Pattern;public class tvCloseCommand implements abstractCommand { //具体命令类(关闭命令) private television tv; public tvCloseCommand(){ tv = new television(); } public void execute() { tv.close(); }}
tvChangeCommand.java
package Command_Pattern;public class tvChangeCommand implements abstractCommand { //具体命令类(关闭命令) private television tv; public tvChangeCommand(){ tv = new television(); } public void execute() { tv.changeChannel(); }}
controller.java
package Command_Pattern;public class controller { //调用者类(遥控器) private abstractCommand openCommand, closeCommand,changeCommand; public controller( abstractCommand openCommand, abstractCommand closeCommand, abstractCommand changeCommand ){ this.openCommand = openCommand; this.closeCommand = closeCommand; this.changeCommand = changeCommand; } public void open(){ openCommand.execute(); } public void change(){ changeCommand.execute(); } public void close(){ closeCommand.execute(); }}
client.java
package Command_Pattern;public class client { //客户端测试类 public static void main(String[] args) { abstractCommand openCommand, closeCommand, changeCommand; openCommand = new tvOpenCommand(); closeCommand = new tvCloseCommand(); changeCommand = new tvChangeCommand(); controller control = new controller( openCommand, closeCommand, changeCommand ); control.open(); control.close(); control.change(); }}
Running Effect
Source Download
Please click the address->Command Pattern
Summarize
- 更松散的耦合
命令模式使得发起命令的对象——客户端,和具体实现命令的对象——接收者对象完全解耦,也就是说发起命令的对象完全不知道具体实现对象是谁,也不知道如何实现。 - 更动态的控制
命令模式把请求封装起来,可以动态地对它进行参数化、队列化和日志化等操作,从而使得系统更灵活。 - 很自然的复合命令
命令模式中的命令对象能够很容易地组合成复合命令,也就是宏命令,从而使系统操作更简单,功能更强大。 - 更好的扩展性
由于发起命令的对象和具体的实现完全解耦,因此扩展新的命令就很容易,只需要实现新的命令对象,然后在装配的时候,把具体的实现对象设置到命令对象中,然后就可以使用这个命令对象,已有的实现完全不用变化。
原文地址:www.iooy.com
阅读全文
0 0
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- 命令模式
- ADAMS运动学和动力学混合测量机械臂末端在空间任意位置的重力变化
- 将单向链表按某个值划分成左边小、中间相等、右边大的形式 Python 版
- Qt-序列号生成器
- MYSQL 什么时候用单列索引?什么使用用联合索引?(收集)
- 算法期中——最小差
- 命令模式
- malloc
- CodeForces 148E(动态规划)
- 最近需要完成的东西
- Java设计模式学习—适配器模式
- 13.Linux进程控制编程
- 14.Python入门之异常处理
- Codeforces Round #449 (Div. 1) E. Welcome home, Chtholly
- Matlab R2008a破解