对命令模式的理解

命令模式把一个请求或者操作封装到命令对象中,这些请求或者操作的内容包括接收者的信息,然后将该命令对象交由执行者执行,执行者不需要关心命令的接收人或者命令的具体内容,因为这些信息均被封装到命令对象中。

命令模式中涉及的角色及其作用如下:

命令接口(Command):声明执行操作的接口,

此接口中有一个执行命令的方法 execute(CommandReceiver receiver) 可见此方法的参数就是命令的接收者。而CommandReceiver 又是命令接受者的接口,实现了此接口的不同的命令具体接收者有选择地执行接口中的方法。

命令接口实现(ConcreteCommand):不同的命令接口实现类实现上面接口的execute方法,在方法中根据需要使命令接收者调用不同的方法。

命令请求者(Invoker):请求执行此次命令

命令接收人(Receiver):由命令接口的实现类来维护Receiver实例,并在命令执行时处理相应的任务。

下面是代码示例

命令接口

public interface Command {
    /**
     * 执行命令,参数为命令接收人
     */
    void execute(CommandReceiver receiver);
}

/**
 * 命令接收者接口,定义了不同的要实现的方法
 */
public interface CommandReceiver {

    //命令执行者方法A
    void doSomethingA();

    //命令执行者方法B
    void doSomethingB();
}

/**
 * 命令请求执行者
 * 其中的请求执行方法以Command接口的实现类为参数
 */
public class CommandExecutor {
    public void execute(Command command) {
        command.execute(new CommandReceiverImpl());
    }
}

/**
 * 命令实现类A,要求接收者实现对象调用A方法
 */
public class CommandA implements Command {
    @Override
    public void execute(CommandReceiver receiver) {
        receiver.doSomethingA();
    }
}

/**
 * 命令实现类B,要求接收者对象执行方法B
 */
public class CommandB implements Command {
    @Override
    public void execute(CommandReceiver receiver) {
        receiver.doSomethingB();
    }
}

/**
 * 命令接收者实现对象,定义了具体的方法要操作的内容
 */
public class CommandReceiverImpl implements CommandReceiver {
    @Override
    public void doSomethingA() {
        System.out.println("doSomethingA");
    }

    @Override
    public void doSomethingB() {
        System.out.println("doSomethingB");
    }
}

/**
 * 调用客户端示例
 */
public class Client {
    public static void main(String[] args) {

        CommandExecutor executor=new CommandExecutor();
        Command commandA=new CommandA();
        executor.execute(commandA);


        Command commandB=new CommandB();
        executor.execute(commandB);

    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值