命令模式(Command)

本文详细解释了命令模式的意图、构成及在软件设计中的作用,通过一个具体的例子展示了如何在命令模式下封装请求。进一步阐述了命令模式在实际场景中的应用,如在Junit中作为测试命令的使用方式,以及这种模式如何简化测试过程。

命令模式的意图:"将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化,对请求进行排队或记录请求日

志..."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框架,是框架来执行的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chatget

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值