命令模式的意图:"将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化,对请求进行排队或记录请求日
志..."Command模式告诉我们可以为一个操作生成一个对象并给出它的一个execute方法!也即:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。
命令模式的构成
1 客户角色:创建一个具体命令对象,并确定其接收者
2 命令角色:声明一个给所有具体命令类的抽象接口。这是一个抽象角色,通常由一个接口或抽象类实现
3 具体命令角色:定义一个接收者和行为之间的弱耦合,实现execute方法,负责调用接收者的相应操作
4 请求者角色:负责调用命令对象执行请求。
5 接收者角色:负责具体实施和执行一个请求
编写顺序:先给出一个命令角色的接口,然后由于具体命令角色定义一个接收者和行为之间的弱耦合,那么就要先有一个接收者,后面有一个请求者
代码如下:
命令角色:
public interface Command {
public void execute();
}
接收者角色:
public class Receiver {
public void doAction(){
System.out.println("执行操作!");
}
}
具体命令角色:
public class ConcretCommand implements Command{
private Receiver receiver;
public ConcretCommand(Receiver receiver){
this.receiver=receiver;
}
@Override
public void execute() {
receiver.doAction();
}
}
请求者角色:
public class Invoker {
private Command command;
public Invoker(Command command){
this.command=command;
}
public void doInvokeAction(){
command.execute();
}
}
客户:创建一个具体命令对象,并确定其接收者
public class Client {
public static void main(String[] args) {
Receiver receiver=new Receiver();
Command command=new ConcretCommand(receiver);
Invoker invoker=new Invoker(command);
invoker.doInvokeAction();
}
}
实际上命令承接了请求者和接收者,请求者调用命令,而命令中真正的操作是接收者
生活中的一个例子:去饭店吃饭,点菜,你不需要知道厨师怎么操作的,你只需要发出一个命令我要这个菜,他接收到这个命令之后把你需要的菜弄出来.
junit中:
命令:把测试发送给junit的时候,junit框架就接收到这些命令了.
将一个请求封装为一个对象,多个请求多个对象,可以对这多个对象进行操作,不需要知道目标是怎么样进行操作的,只要封装对象即可
junit中,我们是命令的编写者,是调用命令的人,命令本身是那些testCase,编写之后发送给junit框架,是框架来执行的.