设计莫模式——命令模式

在这里插入图片描述

命令模式是一种行为型设计模式,用于将请求封装为一个对象,从而允许客户端通过参数化来进行参数化调用。在命令模式中,请求的发送者(调用者)和请求的接收者(执行者)之间解耦,使得可以灵活地扩展、撤销和队列请求。

以下是命令模式的主要角色:

  1. 命令(Command): 定义了执行操作的接口,通常包含执行(execute)方法。该接口可以是抽象类或接口,其中可能包含一些参数用于执行请求。

  2. 具体命令(Concrete Command): 实现了命令接口,负责实现具体的操作。具体命令将接收者对象绑定到一个动作,并在调用时调用接收者的相应方法来执行命令。

  3. 接收者(Receiver): 接收者知道如何实施与执行一个请求相关的操作。任何类都可以充当一个接收者,只要它能够实现命令要求实现的相应功能。

  4. 调用者(Invoker): 调用者负责将命令发送给接收者执行。调用者并不知道命令的具体实现,它只知道如何调用命令对象来完成请求。

  5. 客户端(Client): 这个客户端是命令模式中的客户端。负责创建具体命令对象,并将其绑定到调用者上,以便触发相关操作,更为恰当的称作装配者更合适,组装接受者和命令对象。

命令模式的优点包括:

  • 解耦了调用操作的对象和实际执行操作的对象,降低了系统的耦合度。
  • 可以轻易地在命令对象上实现撤销、重做、日志记录等功能。
  • 可以将命令对象进行参数化,使得可以更加灵活地调用不同的请求。

命令模式通常应用于需要将请求发送给其他对象进行处理的场景,例如菜单项、按钮、键盘快捷键等用户界面元素的操作。

具体类图如下:
在这里插入图片描述

总而言之,言而总之,类的依赖关系如图,下面引入一个DEMO级别的示例。

示例代码

类图
在这里插入图片描述

Command

public interface Command {
    void execute();
}

Receiver 类

public class Receiver {
    public void action(String cmd){
        System.out.println("hello i am action , from cmd :"+cmd);
    }
}

ConcreteCommand

public class ConcreteCommand  implements Command{
    String cmd="i am concrete";
    Receiver receiver;
    public ConcreteCommand(Receiver receiver){
        this.receiver=receiver;
    }
    @Override
    public void execute() {
        receiver.action(cmd);
    }
}

Invoker

public class Invoker {
   private Command cmd;
    public void setCmd(Command cmd){
        this.cmd=cmd;
    }
    public void executeCmd(){
        cmd.execute();
    }
}

Client

public class Client {
    public static void main(String[] args) {
        System.out.println("hello , i am cmd design pattern");
        Receiver receiver=new Receiver();
        Command cmd=new ConcreteCommand(receiver);

        Invoker invoker=new Invoker();
        invoker.setCmd(cmd);

        invoker.executeCmd();


    }
}

后续会引入项目实例,进行实践性说明。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

五之

真实案例以及商业项目技术

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

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

打赏作者

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

抵扣说明:

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

余额充值