设计模式-命令模式(Command)

本文介绍了命令模式的基本概念、结构、代码示例,展示了其如何通过解耦请求者和接收者实现操作的灵活性,以及在Java中的应用实例,包括在线购物系统和支持撤销功能的文本编辑器。

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."
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

BrightChen666

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

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

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

打赏作者

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

抵扣说明:

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

余额充值