java设计模式 -【策略模式】

策略模式定义

策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。它将算法封装成独立的类,使得它们可以相互替换,而不影响客户端代码。

核心组成

Context(上下文) :持有一个策略对象的引用,负责调用策略的具体实现。
Strategy(策略接口) :定义所有支持的算法或行为的公共接口。
ConcreteStrategy(具体策略):实现策略接口的具体算法或行为。

实现示例(Java代码)

java 复制代码
// 策略接口  
interface PaymentStrategy {  
    void pay(int amount);  
}  

// 具体策略:信用卡支付  
class CreditCardPayment implements PaymentStrategy {  
    private String cardNumber;  
    public CreditCardPayment(String cardNumber) {  
        this.cardNumber = cardNumber;  
    }  
    @Override  
    public void pay(int amount) {  
        System.out.println("Paid " + amount + " via Credit Card: " + cardNumber);  
    }  
}  

// 具体策略:支付宝支付  
class AlipayPayment implements PaymentStrategy {  
    private String account;  
    public AlipayPayment(String account) {  
        this.account = account;  
    }  
    @Override  
    public void pay(int amount) {  
        System.out.println("Paid " + amount + " via Alipay: " + account);  
    }  
}  

// 上下文类  
class ShoppingCart {  
    private PaymentStrategy paymentStrategy;  
    public void setPaymentStrategy(PaymentStrategy strategy) {  
        this.paymentStrategy = strategy;  
    }  
    public void checkout(int amount) {  
        paymentStrategy.pay(amount);  
    }  
}  

// 客户端代码  
public class Main {  
    public static void main(String[] args) {  
        ShoppingCart cart = new ShoppingCart();  
        cart.setPaymentStrategy(new CreditCardPayment("1234-5678-9012"));  
        cart.checkout(100);  

        cart.setPaymentStrategy(new AlipayPayment("user@example.com"));  
        cart.checkout(200);  
    }  
}  
 

适用场景

需要动态切换算法或行为时(如支付方式、排序算法)。

避免多重条件判断(如大量的 if-else 或 switch 语句)。

需要隔离算法逻辑与客户端代码。

相关推荐
毕设源码-郭学长1 小时前
【开题答辩全过程】以 基于SpringBoot技术的美妆销售系统为例,包含答辩的问题和答案
java·spring boot·后端
梨落秋霜1 小时前
Python入门篇【文件处理】
android·java·python
Java 码农1 小时前
RabbitMQ集群部署方案及配置指南03
java·python·rabbitmq
哈库纳玛塔塔1 小时前
放弃 MyBatis,拥抱新一代 Java 数据访问库
java·开发语言·数据库·mybatis·orm·dbvisitor
S***q3772 小时前
Spring Boot管理用户数据
java·spring boot·后端
天“码”行空3 小时前
java面向对象的三大特性之一多态
java·开发语言·jvm
毕设源码-郭学长3 小时前
【开题答辩全过程】以 基于SpringBoot框架的民俗文化交流与交易平台的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
好大哥呀3 小时前
Java Web的学习路径
java·前端·学习
f***14773 小时前
SpringBoot实战:高效实现API限流策略
java·spring boot·后端
on the way 1233 小时前
day06-SpringDI 依赖注入
java·spring