0
点赞
收藏
分享

微信扫一扫

对命令模式的理解

认真的老去 2022-02-26 阅读 210
命令模式

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

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

命令接口(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);

    }
}
举报

相关推荐

0 条评论