当前位置: 首页 > backend >正文

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

策略模式定义

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

核心组成

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

实现示例(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 语句)。
需要隔离算法逻辑与客户端代码。

http://www.xdnf.cn/news/16080.html

相关文章:

  • 为什么本地ip记录成0.0.0.1
  • 扫地机产品--同理心地图的方法,展现一个功能的痛点提炼
  • 智能营销革命:AI如何重塑个性化广告的创作逻辑
  • 汽车电子架构
  • LeetCode热题100--24. 两两交换链表中的节点--中等
  • 视频孪生赋能数字住建:构建智慧城市新蓝图​
  • TDengine 的 HISTOGRAM() 函数用户手册
  • 如何在 npm 上发布 Element Plus 二次封装组件
  • 算法竞赛备赛——【图论】最小生成树
  • 关于针对 DT_REG 出现红色波浪线的问题(编译错误/IDE警告),以下是 精准解决方案,保持你的代码功能完全不变:
  • 基于数据挖掘的短视频点赞影响因素分析【LightGBM、XGBoost、随机森林、smote】
  • 如何在macOS上修改iPhone的定位
  • uniapp拦截返回事件
  • Android Multidex 完全解析:解决64K方法数限制
  • LLM 幻觉一般是由于什么产生的,在模型什么部位产生
  • 编程与数学 03-001 计算机组成原理 21_服务器计算机组成实例解析
  • Django学习之旅--第13课:Django模型关系进阶与查询优化实战
  • STM32 基础知识 定时器【概念】
  • Go语言实现DNS解析与域名服务:从基础到生产实践
  • SOLIDWORKS2025教育版集成了电气与自动化设计功能
  • 内存飙升但无 OOM?用 eBPF 捕获隐性内存泄漏事件
  • 7.23总结设备虚拟化技术
  • 统一服务入口——Spring Cloud Gateway
  • Unreal5从入门到精通之使用 Python 编写虚幻编辑器脚本
  • 旧手机部署轻量级服务器
  • 什么是MySQL 视图
  • MySQL binlog解析
  • 2.1 为什么定义tensor数据结构?
  • 前端面试专栏-工程化:29.微前端架构设计与实践
  • [Semantic Seg][KD]FreeKD: Knowledge Distillation via Semantic Frequency Prompt