23种设计模式-行为型模式之策略模式(Java版本)

Java 策略模式(Strategy Pattern)详解

🧠 什么是策略模式?

策略模式是一种行为型设计模式,它定义了一系列算法,把它们一个个封装起来,并且使它们可以互相替换。策略模式让算法独立于使用它的客户端独立变化。


🎯 使用场景

  • 多种算法或行为频繁切换
  • 避免冗长的 if-elseswitch 语句
  • 希望将行为的选择交由客户端决定

🏗️ 模式结构

  • Context(上下文):维护一个对策略对象的引用
  • Strategy(抽象策略类):定义所有支持的算法的公共接口
  • ConcreteStrategy(具体策略类):实现具体的算法

✅ 示例:支付策略

策略接口(Strategy)

java 复制代码
public interface PaymentStrategy {
    void pay(int amount);
}

具体策略(ConcreteStrategy)

java 复制代码
public class CreditCardPayment implements PaymentStrategy {
    private String cardNumber;
    public CreditCardPayment(String cardNumber) {
        this.cardNumber = cardNumber;
    }
    @Override
    public void pay(int amount) {
        System.out.println("使用信用卡支付 " + amount + " 元,卡号:" + cardNumber);
    }
}

public class WeChatPayment implements PaymentStrategy {
    @Override
    public void pay(int amount) {
        System.out.println("使用微信支付 " + amount + " 元");
    }
}

上下文类(Context)

java 复制代码
public class PaymentContext {
    private PaymentStrategy strategy;
    public void setStrategy(PaymentStrategy strategy) {
        this.strategy = strategy;
    }
    public void executePayment(int amount) {
        strategy.pay(amount);
    }
}

客户端调用

java 复制代码
public class Client {
    public static void main(String[] args) {
        PaymentContext context = new PaymentContext();

        context.setStrategy(new CreditCardPayment("1234-5678-9876"));
        context.executePayment(500);

        context.setStrategy(new WeChatPayment());
        context.executePayment(300);
    }
}

✅ 优点

  • 避免大量条件语句
  • 易于扩展新策略,符合开闭原则
  • 提高算法或行为的灵活性

⚠️ 缺点

  • 增加了类的数量
  • 客户端必须了解所有策略,才能选择合适的

🧩 使用建议

当你有多种行为变化的情况,并希望通过多态将它们分开处理时,策略模式是一个很优雅的选择。

相关推荐
reddingtons17 小时前
【游戏宣发】PS “生成式扩展”流,30秒无损适配全渠道KV
游戏·设计模式·新媒体运营·prompt·aigc·教育电商·游戏美术
你怎么知道我是队长17 小时前
C语言---枚举变量
c语言·开发语言
李慕婉学姐17 小时前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
吃茄子的猫17 小时前
quecpython中&的具体含义和使用场景
开发语言·python
云栖梦泽17 小时前
易语言中小微企业Windows桌面端IoT监控与控制
开发语言
数据大魔方17 小时前
【期货量化实战】日内动量策略:顺势而为的短线交易法(Python源码)
开发语言·数据库·python·mysql·算法·github·程序员创富
奋进的芋圆18 小时前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin19 小时前
设计模式之桥接模式
java·设计模式·桥接模式
Edward.W19 小时前
Python uv:新一代Python包管理工具,彻底改变开发体验
开发语言·python·uv
小熊officer19 小时前
Python字符串
开发语言·数据库·python