Java设计模式15——命令模式
2016-11-12 21:49
351 查看
一、介绍
命令模式:将一个请求封装为对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。也称为:动作(Action)模式、事务(transaction)模式。二、模式结构
Command抽象命令类: 声明执行操作的接口。ConcreteComand具体命令类:通常持有 一个接收者对象并绑定于一个动作, 调用接收者相应的操作,以实现execute方法。
Invoker调用者/请求者: 请求的发送者,它通过命令对象来执行请求。一个调用者并不需要在设计时确定其接收者,因此它只与抽象命令类之间存在关联。在程序运行时,将调用命令对象的execute(),间接调用接收者的相关操作。
Receiver接收者:接收者执行与请求相关的操作,具体实现对请求的业务处理。
结构图:
代码示例:
Receiver接收者:
/** * 真正的命令执行者 */ public class Receiver { public void action(){ System.out.println("执行命令----"); } public void unAction(){ System.out.println("撤销命令----"); } }
Command抽象命令类:
/** * 抽象命令接口 */ public interface Command { void execute();//执行命令 void cancel();//取消命令 }
ConcreteComand具体命令类:
/** * 具体命令类 */ public class ConcreteCommand implements Command{ private Receiver receiver; public ConcreteCommand(Receiver receiver) { super(); this.receiver = receiver; } public void execute() { //可进行执行命令前相关操作 receiver.action();//执行命令 //可进行执行命令后相关操作 } public void cancel() { receiver.unAction(); } }
Invoker调用者/请求者:
public class Invoker { private Command command; public Invoker(Command command) { super(); this.command = command; } //执行命令 public void runCommand(){ command.execute(); } //取消命令 public void cancelCommand(){ command.cancel(); } }
客户端:
public class Client { public static void main(String[] args) { //创建接收者 Receiver receiver=new Receiver(); //创建命令对象,并设置接收者 Command command=new ConcreteCommand(receiver); //创建调用者,设置命令 Invoker invoker=new Invoker(command); invoker.runCommand(); invoker.cancelCommand(); } } //输出结果 执行命令---- 撤销命令----
三、命令模式的优缺点
优点:降低对象之间的耦合度。
新的命令可以很容易地加入到系统中。
可以比较容易地设计一个组合命令。
调用同一方法实现不同的功能。
缺点:
使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用。
四、总结
命令模式将发出请求的对象和执行请求的对象解耦, 在被解耦的两者之间是通过命令对象进行沟通的。命令对象封装了接收者和一个或一组动作。命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否被执行、何时被执行,以及是怎么被执行的。
命令模式的关键在于引入了抽象命令接口,且发送者针对抽象命令接口编程,只有实现了抽象命令接口的具体命令才能与接收者相关联。
相关文章推荐
- JAVA设计模式(15):行为型-命令模式(Command)
- java设计模式15_命令模式
- JAVA设计模式(15):行为型-命令模式(Command)
- java设计模式之Command(菜单命令)
- 设计模式笔记(15)---命令模式(行为型)
- JAVA设计模式九--Command(命令模式)
- JAVA设计模式之命令模式
- java 设计模式学习笔记十二 command命令设计模式
- 戏说java设计模式中的命令模式
- java设计模式_命令模式
- java设计模式之命令模式Command
- java软件体系设计模式----命令
- JAVA设计模式之命令模式
- 设计模式笔记(15)---命令模式(行为型)
- Java设计模式——命令模式
- java设计模式之Command(菜单命令)
- Java设计模式-之Command命令模式
- Java设计模式(16)--命令
- Java设计模式 Design Pattern:命令模式 Command Pattern
- java 设计模式学习笔记十二 command命令设计模式