当前位置: 首页 > news >正文

设计模式简述(九)命令模式

命令模式

  • 描述
    • 基本使用
    • 使用

描述

命令模式是一种体现高内聚的行为模式。
将整个请求封装成一个命令对象,由这个命令对象完成所需业务调用。
命令对象封装了该命令需要的所有逻辑,不需要调用方关注内部细节。

基本使用

  • 定义抽象命令(所有命令都基于这个抽象命令定义)
public abstract class AbstractCommand {
    abstract void execute();
}
  • 定义命令对象内要实际调用的业务对象
public interface IReceiver {
    void action();
}

public class ReceiverA implements IReceiver {
    @Override
    public void action() {
        System.out.println("ReceiverA action ....");
    }
}

public class ReceiverB implements IReceiver {
    @Override
    public void action() {
        System.out.println("ReceiverB action ....");
    }
}

  • 定义两个具体的命令
public class CommandA extends AbstractCommand{
    private IReceiver receiver;

    public CommandA(IReceiver receiver) {
        this.receiver = receiver;
    }

    @Override
    void execute() {
        System.out.println("commandA....");
        receiver.action();
    }
}

public class CommandAB extends AbstractCommand{
    private IReceiver[] receivers;

    public CommandAB(IReceiver... receivers) {
        this.receivers = receivers;
    }

    @Override
    void execute() {
        System.out.println("commandA....");
        for (IReceiver receiver : receivers) {
            receiver.action();
        }
    }
}

使用

public class Sample {
    public static void main(String[] args) {
        IReceiver receiverA = new ReceiverA();
        IReceiver receiverB = new ReceiverB();
        AbstractCommand command = new CommandA(receiverA);
        command.execute();
        AbstractCommand commandAb = new CommandAB(receiverA, receiverB);
        commandAb.execute();
    }
}

相关文章:

  • 【统计方法】降维方式;pca, t-sne, mds
  • 浙江西湖游记
  • TLS协议详解
  • 关于AI大模型的一些理解
  • 基于 Spring Boot 瑞吉外卖系统开发(一)
  • 从扩展黎曼泽塔函数构造物质和时空的结构-16
  • PyTorch 实现图像版多头注意力(Multi-Head Attention)和自注意力(Self-Attention)
  • 棋盘问题(DFS)
  • 【文献研究】含硼钢中BN表面偏析对可镀性的影响
  • 使用OpenSceneGraph生成3D数据格式文件
  • 经典回溯问题———组合的输出
  • CentOS 部署 Nodejs
  • java面试篇 Redis+MySQL+Spring
  • 【C/C++】滑动谜题(leetcode T773)
  • Transformer架构
  • 【ARTS】2873.有序三元组中的最大值!
  • c语言修炼秘籍 - - 禁(进)忌(阶)秘(技)术(巧)【第五式】动态内存管理
  • JS实现AES和DES
  • 蓝桥杯刷题周计划(第四周)
  • 手撕LLM(二):从源码出发,探索LoRA加载、推理全流程
  • 一个网站的成本/肇庆疫情最新情况
  • 南皮做网站/2345网止导航
  • 做效果图的网站有哪些软件/百度自动点击器怎么用
  • 重庆拓达建设集团网站/引擎优化是什么工作
  • wordpress怎么让网页支持多国语言/seo常见的优化技术
  • 外包网站会自己做原型吗/攀枝花网站seo