设计模式之命令模式

文章目录

定义

命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,从而让你可以用不同的请求对客户进行参数化,队列化请求或者记录请求日志,以及支持可撤销的操作。

命令模式的要素:

  1. 命令接口(Command Interface):定义执行操作的接口。
  2. 具体命令(Concrete Command):实现命令接口,负责具体的业务逻辑处理。
  3. 接收者(Receiver):真正执行操作的类,包含业务逻辑方法。
  4. 调用者(Invoker):持有命令对象,并调用其execute方法来执行命令。

示例代码

  1. 定义命令接口

    java 复制代码
    public interface Command {
        void execute();
    }
  2. 实现具体命令

    java 复制代码
    public class LightOnCommand implements Command {
        private final Light light;
    
        public LightOnCommand(Light light) {
            this.light = light;
        }
    
        @Override
        public void execute() {
            light.turnOn();
        }
    }
    java 复制代码
    public class LightOffCommand implements Command {
        private final Light light;
    
        public LightOffCommand(Light light) {
            this.light = light;
        }
    
        @Override
        public void execute() {
            this.light.turnOff();
        }
    }
  3. 定义接收者

    java 复制代码
    public class Light {
        public void turnOn() {
            System.out.println("Light is on");
        }
    
        public void turnOff() {
            System.out.println("Light is off");
        }
    }
  4. 调用者

    java 复制代码
    public class RemoteControl {
        private Command command;
    
        public void setCommand(Command command) {
            this.command = command;
        }
    
        public void pressButton() {
            command.execute();
        }
    }
  5. 使用示例

    java 复制代码
    public class CommandTest extends TestCase {
        @Test
        public void test() {
            // 创建电灯对象
            Light light = new Light();
    
            // 创建命令对象
            Command lightOn = new LightOnCommand(light);
            Command lightOff = new LightOffCommand(light);
    
            // 创建遥控器对象
            RemoteControl remoteControl = new RemoteControl();
    
            // 设置命令
            remoteControl.setCommand(lightOn);
            // 按下按钮,执行命令
            remoteControl.pressButton();// 输出: Light is on
    
            // 更换命令
            remoteControl.setCommand(lightOff);
            // 再次按下按钮,执行新的命令
            remoteControl.pressButton(); // 输出: Light is off
        }
    }

    运行结果:

    复制代码
    Light is on
    Light is off
相关推荐
阿星AI工作室2 小时前
给openclaw龙虾造了间像素办公室!实时看它写代码、摸鱼、修bug、写日报,太可爱了吧!
前端·人工智能·设计模式
_哆啦A梦1 天前
Vibe Coding 全栈专业名词清单|设计模式·基础篇(创建型+结构型核心名词)
前端·设计模式·vibecoding
阿闽ooo4 天前
中介者模式打造多人聊天室系统
c++·设计模式·中介者模式
小米4964 天前
js设计模式 --- 工厂模式
设计模式
逆境不可逃4 天前
【从零入门23种设计模式08】结构型之组合模式(含电商业务场景)
线性代数·算法·设计模式·职场和发展·矩阵·组合模式
驴儿响叮当20104 天前
设计模式之状态模式
设计模式·状态模式
电子科技圈4 天前
XMOS推动智能音频等媒体处理技术从嵌入式系统转向全新边缘计算
人工智能·mcu·物联网·设计模式·音视频·边缘计算·iot
徐先生 @_@|||5 天前
安装依赖三方exe/msi的软件设计模式
设计模式
希望_睿智5 天前
实战设计模式之访问者模式
c++·设计模式·架构
茶本无香5 天前
设计模式之十六:状态模式(State Pattern)详解 -优雅地管理对象状态,告别繁琐的条件判断
java·设计模式·状态模式