命令模式

命令模式(Command)

命令模式是行为模式之一,Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数

1. 命令模式中的角色及其职责

1.1 Command

是一个抽象类,类中对需要执行的命令进行声明,一般来说要对外公布一个execute方法用来执行命令。

Command

package com.liuyao;

/**
 * @author liuyao
 * @date 2018/08/06
 */
public abstract class Command {
    public abstract void execute();
}

1.2 Concrete Command

Command类的实现类,对抽象类中声明的方法进行实现

Concrete Command

package com.liuyao;

/**
 * @author liuyao
 * @date 2018/08/06
 */
public class ConcreteCommand extends Command{
    private Receiver receiver;

    public ConcreteCommand(Receiver receiver) {
        this.receiver = receiver;
    }

    @Override
    public void execute() {
        this.receiver.doSomething();
    }
}

1.3 Invoker

调用者,负责调用命令。

Invoker

package com.liuyao;

/**
 * @author liuyao
 * @date 2018/08/06
 */
public class Invoker {
    private Command command;

    public void setCommand(Command command) {
        this.command = command;
    }

    public void action(){
        this.command.execute();
    }
}

1.4 Receiver

接收者,负责接收命令并且执行命令。

Receiver

package com.liuyao;

/**
 * @author liuyao
 * @date 2018/08/06
 */
public class Receiver {
    public void doSomething(){
        System.out.println("Receiver doSomething");
    }
}

Main

package com.liuyao;

public class Main {

    public static void main(String[] args) {
        Receiver receiver=new Receiver();
        Command command=new ConcreteCommand(receiver);
//        客户端可以直接执行具体的命令
        command.execute();

//        客户端通过调用者类执行命令
        Invoker invoker=new Invoker();
        invoker.setCommand(command);
        invoker.action();
    }
}

//Receiver doSomething
//Receiver doSomething

2. 应用场景

一般情况下一个对象调用另外一个对象的调用过程为:一般是创建目标对象实例,设置调用参数,调用目标对象的方法。

但在有些情况下有必要使用一个专门的类对这种调用的过程加以封装,我们把这种专门的类叫做Command类。

整个调用过程比较复杂,或者存在多处这种调用。这时,使用Command类对该调用加以封装,便于功能的再利用。

调用前后需要对调用参数进行某些处理

调用前后需要进行某些额外的处理,比如日志,缓存,记录历史操作等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值