设计模式 行为型模式 -- 命令模式(介绍、结构、命令队列、请求日志、测试操作、宏命令、优缺点 使用场景)

01:设计模式 行为型模式 – 命令模式(介绍、结构、命令队列、请求日志、测试操作、宏命令、优缺点 使用场景)
02:设计模式 行为型模式 实例 – 命令模式实例:文本编辑器
03:设计模式 行为型模式 – 命令模式(具体实例、JDK源码分析:Runable)

1. 命令模式引入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2. 命令模式定义

在这里插入图片描述


3. 命令模式结构

在这里插入图片描述
在这里插入图片描述


4. 命令模式实现

在这里插入图片描述


4.1 典型的抽象命令类代码

在这里插入图片描述


4.2 典型的调用者(请求发送者) 类代码

在这里插入图片描述


4.3 典型的请求接收者类代码

在这里插入图片描述


5. 实现命令队列

动机:

在这里插入图片描述

实现:

在这里插入图片描述
在这里插入图片描述


6. 记录请求日志

动机:

在这里插入图片描述

实现:

在这里插入图片描述


7. 实现撤销操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

具体实现:

AbstractCommand.java

package com.tian.demo;

/**
 * ClassName: AbstractCommand
 * Description: 抽象命令类
 *
 * @author Tianjiao
 * @date 2021/11/16 18:34
 */
public abstract class AbstractCommand {
    // 命令执行方法
    public abstract int execute(int value);

    // 撤销方法
    public abstract int undo();
}

AddCommand.java

package com.tian.demo;

/**
 * ClassName: AddCommand
 * Description: 具体命令类
 *
 * @author Tianjiao
 * @date 2021/11/16 18:36
 */
public class AddCommand extends AbstractCommand {
    private Adder adder = new Adder();
    private int value;

    @Override
    public int execute(int value) {
        this.value = value;
        return adder.add(value);
    }

    @Override
    public int undo() {
        return adder.add(-value);
    }
}

Adder.java

package com.tian.demo;

/**
 * ClassName: Adder
 * Description: 加法类:接收者类
 *
 * @author Tianjiao
 * @date 2021/11/16 17:26
 */
public class Adder {
    // 定义初始值为0
    private int num = 0;

    // 加法操作, 每次将传入的值与num作加法运算, 再将结果返回
    public int add(int value) {
        num += value;
        return num;
    }
}

CalculatorForm.java

package com.tian.demo;

/**
 * ClassName: CalculatorForm
 * Description: 请求发送者
 *
 * @author Tianjiao
 * @date 2021/11/16 18:40
 */
public class CalculatorForm {
    private AbstractCommand command;

    public void setCommand(AbstractCommand command) {
        this.command = command;
    }

    // 调用命令对象得execute方法
    public void compute(int value) {
        int result = command.execute(value);
        System.out.println("执行运算, 运算结果为:" + result);
    }

    // 调用命令对象得undo方法
    public void undo() {
        int result = command.undo();
        System.out.println("执行撤销, 运算结果为:" + result);
    }
}

Client.java

package com.tian.demo;

/**
 * ClassName: Client
 * Description: 客户端测试类
 *
 * @author Tianjiao
 * @date 2021/11/16 18:47
 */
public class Client {
    public static void main(String[] args) {
        CalculatorForm form = new CalculatorForm();
        AbstractCommand command = new AddCommand();
        // 向发送者注入命令对象
        form.setCommand(command);

        // 测试运算
        form.compute(10);
        form.compute(15);
        form.compute(2);
        // 撤销
        form.undo();
    }
}

运行结果:

在这里插入图片描述


8. 宏命令

动机:

在这里插入图片描述

结构:

在这里插入图片描述


9. 优缺点 使用场景


9.1 优点

在这里插入图片描述


9.2 缺点

在这里插入图片描述


9.3 使用场景

在这里插入图片描述



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CodeJiao

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值