编程语言
首页 > 编程语言> > Java 设计模式之【命令】学习与掌握

Java 设计模式之【命令】学习与掌握

作者:互联网

文章目录

定义

这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。


优点


缺点


模式的结构与实现

可以将系统中的相关操作抽象成命令,使调用者与实现者相关分离。

模式的结构


模式的实现

抽象命令角色】,代码如下:

package com.example.designmodedemo.principle.command;

/**
 * 抽象命令
 */
public interface ICommand {

    void exec();

}

接收者角色】,代码如下:

package com.example.designmodedemo.principle.command;

/**
 * 接收者:接收命令,执行命令相关操作
 */
public class CommandRec {

    public void action(){
        System.out.println(":> 接收者执行命令。");
    }

}

具体命令角色】,代码如下:

package com.example.designmodedemo.principle.command;

/**
 * 具体命令:实现抽象命令接口
 */
public class ImlCommand implements ICommand{

    private CommandRec receiver;// 接收者对象

    public ImlCommand(CommandRec receiver) {
        this.receiver = receiver;
    }

    @Override
    public void exec() {
        if (receiver != null){
            receiver.action();
        }
    }
}

调用者角色】,代码如下:

package com.example.designmodedemo.principle.command;

/**
 * 调用者:通过命令对象执行请求
 */
public class Invoker {

    private ICommand iCommand;

    public Invoker(ICommand iCommand) {
        this.iCommand = iCommand;
    }

    public ICommand getiCommand() {
        return iCommand;
    }

    public void setiCommand(ICommand iCommand) {
        this.iCommand = iCommand;
    }

    public void call(){
        System.out.println(":> 调用者开始执行命令...");
        iCommand.exec();
    }

}

客户端】,调用代码如下:

	/**
     * 命令模式
     */
    private void principle_command() {
        ICommand iCommand = new ImlCommand(new CommandRec());// 创建具体命令对象
        Invoker invoker = new Invoker(iCommand);// 调用者
        invoker.call();// 客户端访问调用者 invoker 的 call() 方法
    }

运行结果】,如下图:

在这里插入图片描述


应用场景

当系统的某项操作具备命令语义,且命令实现不稳定(变化)时,可以通过命令模式解耦请求与实现。使用抽象命令接口使请求方的代码架构稳定,封装接收方具体命令的实现细节。接收方与抽象命令呈现弱耦合(内部方法无需一致),具备良好的扩展性。


技术永不眠!我们下期见!

标签:iCommand,Java,调用者,掌握,接收者,模式,命令,设计模式,public
来源: https://blog.csdn.net/csdnzouqi/article/details/121166129