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

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.dtcms.com/a/294100.html

相关文章:

  • AJAX案例合集
  • flutter使用CupertinoPicker绘制一个传入数据源的省市区选择器
  • 二级建造师学习笔记-2025
  • 【Linux-云原生-笔记】keepalived相关
  • DenseNet详解,附模型代码(pytorch)
  • Python设计模式 - 桥接模式
  • vite搭建react-ts项目,@别名配置
  • Python-Pytorch编码习惯
  • Windows 编程辅助技能:速览定义
  • 生成式人工智能展望报告-欧盟-02-技术方面
  • 以 “有机” 重构增长:云集从电商平台到健康生活社区的跃迁
  • 突发限制下的破局之路:国产之光 Lynx 重构 AI 开发安全壁垒
  • Petalinux的常用指令
  • Hexo - 免费搭建个人博客04 - 创建另一个私人仓库,对Hexo项目进行版本管理
  • RabbitMQ--消费端单线程与多线程
  • 电子电气架构 --- 汽车软件全生命周期
  • 小架构step系列23:加载自定义配置
  • Vue 浏览器本地存储
  • 05-ES6
  • Linux修炼:进程概念(上)
  • apache-doris安装兼datax-web配置
  • 【2025】使用vue构建一个漂亮的天气卡片
  • 加载用户设置时遇到错误找到一个带有无效“icon“的配置文件。将该配置文件默认为无图标。确保设置“icon“时,该值是图像的有效文件路径“
  • 基于php的校园招聘平台
  • 三步实现Android系统级集成:预装Google TTS + 默认引擎设置 + 语音包预缓存方案
  • ArcGIS Pro从0开始制作中国主图及黄土高原地势区域图
  • opencv学习(图像处理)
  • Linux dd命令 数据备份、转换与磁盘操作的终极工具
  • 剪枝和N皇后在后端项目中的应用
  • (进阶向)Python第十三期,opencv的图像预处理方法[1]