JAVA设计模式,策略模式

策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式通常用来实现一组相关的行为或策略,让客户端可以在运行时选择其中的一个来执行。

下面是一个简单的Java代码示例,演示了如何使用策略模式来实现不同的折扣计算方法:

定义策略接口

首先,我们需要定义一个策略接口,该接口声明了一个所有具体策略类必须实现的方法。在这个例子中,我们将定义一个`DiscountStrategy`接口,用于表示折扣计算的策略。

```java

public interface DiscountStrategy {

double applyDiscount(double originalPrice);

}

```

实现具体的策略

接下来,我们为每种折扣策略创建具体的实现类。例如,我们可以有一个固定折扣和一个百分比折扣的实现。

```java

// 固定金额折扣策略

public class FixedDiscountStrategy implements DiscountStrategy {

private final double discountAmount;

public FixedDiscountStrategy(double discountAmount) {

this.discountAmount = discountAmount;

}

@Override

public double applyDiscount(double originalPrice) {

return Math.max(originalPrice - discountAmount, 0); // 确保价格不低于0

}

}

// 百分比折扣策略

public class PercentageDiscountStrategy implements DiscountStrategy {

private final double percentage;

public PercentageDiscountStrategy(double percentage) {

this.percentage = percentage;

}

@Override

public double applyDiscount(double originalPrice) {

return originalPrice * (1 - percentage / 100);

}

}

```

创建上下文类

然后,我们需要创建一个上下文类,这个类持有一个对策略对象的引用,并提供一个方法来设置当前使用的策略。此外,它还提供了一个方法来应用选定的策略。

```java

public class ShoppingCart {

private DiscountStrategy discountStrategy;

public void setDiscountStrategy(DiscountStrategy discountStrategy) {

this.discountStrategy = discountStrategy;

}

public double calculateTotal(double originalPrice) {

if (discountStrategy == null) {

return originalPrice; // 如果没有设置策略,则不打折

}

return discountStrategy.applyDiscount(originalPrice);

}

}

```

使用策略模式

最后,我们可以通过以下方式来使用这些策略:

```java

public class Main {

public static void main(String\[\] args) {

ShoppingCart cart = new ShoppingCart();

// 假设商品原价是100元

double originalPrice = 100.0;

// 应用固定折扣策略

cart.setDiscountStrategy(new FixedDiscountStrategy(20.0)); // 减去20元

System.out.println("Fixed discount price: " + cart.calculateTotal(originalPrice));

// 应用百分比折扣策略

cart.setDiscountStrategy(new PercentageDiscountStrategy(10)); // 打9折

System.out.println("Percentage discount price: " + cart.calculateTotal(originalPrice));

}

}

```

以上代码展示了如何在Java中实现策略模式。通过这种方式,你可以很容易地添加新的折扣计算方法,而不需要修改现有的代码,从而遵循了开闭原则(对扩展开放,对修改关闭)。

相关推荐
2分钟速写快排1 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
面向Google编程1 小时前
Apache Iceberg Variant 类型:v3 半结构化数据不再「二选一」
大数据·后端
lhldsg2 小时前
全民健身解决方案小程序开发:从0到1的技术实战
java·数据库·需求分析
jason成都2 小时前
Spring WebFlux 适配达梦新方案|dm‑r2dbc:Netty 异步传输的实验性 R2DBC 驱动
java·后端·spring
泡海椒2 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
辰烨chenye2 小时前
LeetCode Hot 100 题解 · 二分篇
java·算法·leetcode
小羊没烦恼!3 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
北岛贰3 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
小荷才露尖尖角,早有蜻蜓立上头4 小时前
过滤器的4种创建方式
java
大圣编蚕4 小时前
Java ByteArrayInputStream 详解:从入门到实战
java·开发语言·算法