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. 宏命令
动机:
结构: