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中实现策略模式。通过这种方式,你可以很容易地添加新的折扣计算方法,而不需要修改现有的代码,从而遵循了开闭原则(对扩展开放,对修改关闭)。

相关推荐
customer0826 分钟前
【开源免费】基于SpringBoot+Vue.JS体育馆管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
Miketutu1 小时前
Spring MVC消息转换器
java·spring
乔冠宇1 小时前
Java手写简单Merkle树
java·区块链·merkle树
LUCIAZZZ2 小时前
简单的SQL语句的快速复习
java·数据库·sql
komo莫莫da3 小时前
寒假刷题Day19
java·开发语言
计算机-秋大田3 小时前
基于微信小程序的电子竞技信息交流平台设计与实现(LW+源码+讲解)
spring boot·后端·微信小程序·小程序·课程设计
S-X-S3 小时前
算法总结-数组/字符串
java·数据结构·算法
linwq83 小时前
设计模式学习(二)
java·学习·设计模式
桦说编程4 小时前
CompletableFuture 超时功能有大坑!使用不当直接生产事故!
java·性能优化·函数式编程·并发编程
@_@哆啦A梦4 小时前
Redis 基础命令
java·数据库·redis