1. 概念
- 命令模式(Command Pattern)是一种行为型设计模式,也被称为动作模式或事务模式。它的核心思想是将一个请求封装成一个对象,从而使你可以用不同的请求对客户进行参数化。对请求排队或记录,以及支持可撤销的操作。命令模式的主要目的是将发出请求的对象和执行请求的对象解耦。
2. 原理结构图

- Command:这是一个接口,它声明了执行操作的方法。这个接口是所有具体命令类的基础,确保它们具有统一的执行方法调用方式。
- ConcreteCommand:这是实现了Command接口的具体类。它定义了接收者如何进行具体的操作执行。一个具体的命令类通常会持有一个对接收者的引用,并通过调用接收者的方法来完成请求的处理。
- Receiver:这是知道如何实施与执行请求相关的操作的类,也就是实际执行命令的对象。任何类都可能成为一个接收者,只要它能够实现命令要求实现的相应功能。
- Invoker:这是负责调用命令对象执行请求的类,它会持有一个命令对象,并在某个时间点触发命令的执行。调用者作为一个中介,将发起请求的对象和执行请求的对象解耦。
3. 代码示例
3.1 示例1–在线购物系统
- 实现一个在线购物系统。以下是一个简单的Java代码实现:
import java.util.ArrayList;
import java.util.List;
interface Command {
void execute();
}
class AddToCartCommand implements Command {
private ShoppingCart cart;
private Product product;
public AddToCartCommand(ShoppingCart cart, Product product) {
this.cart = cart;
this.product = product;
}
@Override
public void execute() {
cart.addProduct(product);
}
}
class RemoveFromCartCommand implements Command {
private ShoppingCart cart;
private Product product;
public RemoveFromCartCommand(ShoppingCart cart, Product product) {
this.cart = cart;
this.product = product;
}
@Override
public void execute() {
cart.removeProduct(product);
}
}
class ShoppingCart {
private List<Product> products = new ArrayList<>();
public void addProduct(Product product) {
products.add(product);
System.out.println("Added " + product.getName() + " to the shopping cart."