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

Spring 设计模式之策略模式

Spring 设计模式之策略模式

  • 策略模式
  • 构成部分
  • java举例

策略模式

策略模式:允许定义一系列算法,并将每一个算法封装起来,使它们可以互相替换,且算法的变化可以独立于使用它们的客户端。

构成部分

  • Context(上下文):维护一个对策略对象的引用,该对象用于客户端调用。
  • Strategy(策略接口):定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,以便环境角色可以使用这个接口来调用不同的算法。
  • ConcreteStrategy(具体策略类):实现了策略接口,提供具体的算法实现。

java举例

// 策略接口  
interface DiscountStrategy {  double calculateDiscount(double totalAmount);  
}  // 具体策略1:百分比折扣  
class PercentageDiscountStrategy implements DiscountStrategy {  private double percentage;  public PercentageDiscountStrategy(double percentage) {  this.percentage = percentage;  }  @Override  public double calculateDiscount(double totalAmount) {  return totalAmount * percentage;  }  
}  // 具体策略2:固定金额折扣  
class FixedAmountDiscountStrategy implements DiscountStrategy {  private double amount;  public FixedAmountDiscountStrategy(double amount) {  this.amount = amount;  }  @Override  public double calculateDiscount(double totalAmount) {  return amount;  }  
}  // 上下文类  
class Order {  private DiscountStrategy discountStrategy;  public Order(DiscountStrategy discountStrategy) {  this.discountStrategy = discountStrategy;  }  public double getTotalAmount() {  // 假设订单总金额为1000元  return 1000.0;  }  public double calculateDiscount() {  return discountStrategy.calculateDiscount(getTotalAmount());  }  
}  // 客户端使用  
public class ECommercePlatform {  public static void main(String[] args) {  // 使用百分比折扣策略  Order order1 = new Order(new PercentageDiscountStrategy(0.10)); // 10%折扣  double discount1 = order1.calculateDiscount();  System.out.println("折扣金额: " + discount1);  // 使用固定金额折扣策略  Order order2 = new Order(new FixedAmountDiscountStrategy(50.0)); // 固定减免50元  double discount2 = order2.calculateDiscount();  System.out.println("折扣金额: " + discount2);  }  
}

输出

折扣金额: 100.0
折扣金额: 50.0

我们定义了一个DiscountStrategy接口,并实现了两个具体策略类:PercentageDiscountStrategy(百分比折扣)和FixedAmountDiscountStrategy(固定金额折扣)。
然后,我们创建了一个Order类作为上下文类,它包含一个对DiscountStrategy对象的引用,并提供了计算折扣的方法。
在客户端代码中,我们根据不同的需求创建了不同的订单对象,并使用了不同的折扣策略来计算折扣金额。

http://www.lryc.cn/news/474506.html

相关文章:

  • 苹果开发 IOS 证书生成步骤
  • DDR2 SDRAM(五)初始化
  • Python工具箱系列(五十七)
  • 数据智能驱动金融策略优化:民锋智能分析技术的应用
  • 1009:带余除法
  • Jmeter实际应用
  • C++基础(11.AVL树的实现)
  • c# 抽象方法 虚函数 使用场景
  • 大数据安全方案 验证
  • 电脑软件:推荐一款免费且实用的电脑开关机小工具
  • php反序列化靶场随笔分析
  • 动态规划 - 编辑距离
  • 力扣——113. 路径总和
  • C02S04-Ubuntu基本使用
  • C语言 | Leetcode C语言题解之第525题连续数组
  • Qml-Transition的使用
  • Notepad++检索包含多个关键字的行
  • C语言:水仙花树,要求三位以上的N位整数每位的N次方等于数本身,全部输出出来
  • 金融贷款口子超市V2源码 Thinkphp开发的贷款和超市平台源码(亲测源码含安装视频教程)
  • redis的三种客户端
  • 边缘计算【智能+安全检测】系列教程--agx orin解决RTC时间问题
  • 数据库动态扩容:Java实现与技术策略
  • Golang | Leetcode Golang题解之第525题连续数组
  • 低代码架构浅析
  • mysql字段是datetime如何按照小时来统计
  • nacos快速启动
  • @Excel若依导出异常/解决BusinessBaseEntity里面的字段不支持导出
  • 虚拟机 Email 恢复专用工具:Virtual Machine Email Recovery
  • 代理人工智能如何应对现代威胁的速度和数量
  • element-plus版本过老,自写选项弹框增删功能