Java设计模式中策略模式

策略模式是一种行为型设计模式 ,它允许在运行时选择算法的行为。这种模式定义了一系列算法,并使这些算法可以相互替换,使得算法的变化独立于使用算法的客户。

以下是策略模式的一般结构:

  1. Context(上下文):负责维护一个对Strategy对象的引用,并且将客户请求委托给Strategy对象。

  2. Strategy(策略):定义所有支持的算法的公共接口。通常是一个接口或者抽象类。

  3. ConcreteStrategy(具体策略):实现了Strategy接口的具体算法实现。

下面是一个简单的Java示例,演示了如何使用策略模式:

java 复制代码
// 1. Strategy
interface PaymentStrategy {
    void pay(double amount);
}

// 2. ConcreteStrategy
class CreditCardPayment implements PaymentStrategy {
    private String cardNumber;
    private String expirationDate;
    private String cvv;

    public CreditCardPayment(String cardNumber, String expirationDate, String cvv) {
        this.cardNumber = cardNumber;
        this.expirationDate = expirationDate;
        this.cvv = cvv;
    }

    @Override
    public void pay(double amount) {
        System.out.println("Paid $" + amount + " using Credit Card");
    }
}

class PayPalPayment implements PaymentStrategy {
    private String email;
    private String password;

    public PayPalPayment(String email, String password) {
        this.email = email;
        this.password = password;
    }

    @Override
    public void pay(double amount) {
        System.out.println("Paid $" + amount + " using PayPal");
    }
}

// 3. Context
class ShoppingCart {
    private PaymentStrategy paymentStrategy;

    public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }

    public void checkout(double amount) {
        paymentStrategy.pay(amount);
    }
}

// 4. 使用示例
public class Main {
    public static void main(String[] args) {
        // 创建购物车对象
        ShoppingCart cart = new ShoppingCart();

        // 设置支付策略为信用卡
        cart.setPaymentStrategy(new CreditCardPayment("1234-5678-9012", "10/25", "123"));

        // 结账
        cart.checkout(100.0);

        // 设置支付策略为PayPal
        cart.setPaymentStrategy(new PayPalPayment("example@example.com", "password"));

        // 结账
        cart.checkout(200.0);
    }
}

在这个示例中,PaymentStrategy是策略接口,CreditCardPayment和PayPalPayment是具体策略。ShoppingCart是上下文,它持有一个对PaymentStrategy的引用,并在结账时调用支付方法。通过更改支付策略,我们可以在不修改ShoppingCart的情况下选择不同的支付方式。

相关推荐
m0_58738300几秒前
无人自助拼豆系统从需求分析到落地部署全流程实战开发指南
java·经验分享·后端·struts·小程序·架构·需求分析
a努力。2 分钟前
四维解析Agent记忆架构:从零实战LangGraph长期记忆
java·开发语言·数据库
碧海银沙音频科技研究院4 分钟前
炬芯ATS308X的扩音器:麦克风到扬声器直通功能实现
java·linux·运维
Rain的Java大神之路10 分钟前
被问麻了!Function Calling、MCP、Skill 到底啥关系?一张图讲透三层架构,附 Java 生产落地全流程+30个坑
java·后端·ai编程
Wang's Blog11 分钟前
Java 项目部署之 Docker工具快速入门: Docker Compose 初识与安装
java·开发语言·docker
niucloud-admin17 分钟前
JAVA V6 多商户商城 开发文档——项目启动
java·开发语言·python
众链网络34 分钟前
Agent 重试的工程解法:幂等、断点续跑与熔断怎么落地
java·前端·数据库·人工智能
Wang's Blog42 分钟前
Java 项目部署之 Docker工具快速入门: 镜像命令从 pull 到 load 的完整实操
java·开发语言·docker
Wang's Blog1 小时前
Java 项目部署之 Docker工具快速入门: Docker 数据卷命令与挂载实操
java·开发语言·docker
云和数据.ChenGuang1 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整指南
java·人工智能·spring boot·后端·重构·springai