命令模式 电商 示例 java
时间: 2023-09-01 19:07:14 浏览: 44
命令模式是一种行为设计模式,用于将请求封装为对象,使得可以将请求参数化,将请求排队或记录请求日志,以及支持可撤销的操作。
在电商场景中,我们可以使用命令模式来实现一些功能,例如:
1. 用户下单后,可以将订单请求封装成一个命令对象,将其添加到队列中等待处理;
2. 对于已完成的订单,可以将取消订单请求封装成一个命令对象,并且支持撤销操作;
3. 对于需要退货的订单,可以将退货请求封装成一个命令对象,并且支持撤销操作。
下面是一个简单的电商场景的 Java 示例:
```java
// 定义一个命令接口
public interface OrderCommand {
void execute();
void undo();
}
// 定义一个订单处理类
public class Order {
public void create() {
System.out.println("创建订单");
}
public void cancel() {
System.out.println("取消订单");
}
public void returnGoods() {
System.out.println("退货");
}
}
// 实现创建订单命令
public class CreateOrderCommand implements OrderCommand {
private Order order;
public CreateOrderCommand(Order order) {
this.order = order;
}
@Override
public void execute() {
order.create();
}
@Override
public void undo() {
order.cancel();
}
}
// 实现取消订单命令
public class CancelOrderCommand implements OrderCommand {
private Order order;
public CancelOrderCommand(Order order) {
this.order = order;
}
@Override
public void execute() {
order.cancel();
}
@Override
public void undo() {
order.create();
}
}
// 实现退货命令
public class ReturnGoodsCommand implements OrderCommand {
private Order order;
public ReturnGoodsCommand(Order order) {
this.order = order;
}
@Override
public void execute() {
order.returnGoods();
}
@Override
public void undo() {
order.create();
}
}
// 定义一个订单处理器
public class OrderHandler {
private Queue<OrderCommand> queue;
public OrderHandler() {
this.queue = new LinkedList<>();
}
public void addCommand(OrderCommand command) {
queue.add(command);
command.execute();
}
public void undoCommand() {
OrderCommand command = queue.poll();
if (command != null) {
command.undo();
}
}
}
// 测试代码
public class CommandTest {
public static void main(String[] args) {
Order order = new Order();
CreateOrderCommand createOrderCommand = new CreateOrderCommand(order);
CancelOrderCommand cancelOrderCommand = new CancelOrderCommand(order);
ReturnGoodsCommand returnGoodsCommand = new ReturnGoodsCommand(order);
OrderHandler handler = new OrderHandler();
handler.addCommand(createOrderCommand);
handler.addCommand(cancelOrderCommand);
handler.addCommand(returnGoodsCommand);
handler.undoCommand();
handler.undoCommand();
handler.undoCommand();
}
}
```
在上面的示例代码中,我们定义了一个 `OrderCommand` 接口,其中包含了 `execute()` 和 `undo()` 两个方法,分别用于执行命令和撤销命令。然后我们分别实现了创建订单、取消订单、退货三个命令,并且定义了一个 `OrderHandler` 用于处理这些命令。在测试代码中,我们将三个命令添加到处理器中,并且按照添加的先后顺序撤销这些命令。