java策略模式代码样例
时间: 2024-10-10 15:15:01 浏览: 35
设计模式-java实现代码样例
策略模式(Strategy Pattern)是一种行为设计模式,它允许在运行时更改对象的行为。这种模式通过创建一系列算法对象,将每个算法封装到独立的对象中,并让客户端能够选择使用哪种算法。
以下是一个简单的Java策略模式的代码示例,假设我们有一个计算折扣的方式策略:
```java
// 定义一个公共的接口或抽象类,作为策略
interface DiscountCalculator {
double calculateDiscount(double totalPrice);
}
// 各种不同的折扣策略实现
class NoDiscount implements DiscountCalculator {
public double calculateDiscount(double totalPrice) {
return totalPrice;
}
}
class FlatRateDiscount implements DiscountCalculator {
private final double rate;
public FlatRateDiscount(double rate) {
this.rate = rate;
}
@Override
public double calculateDiscount(double totalPrice) {
return totalPrice * (1 - rate);
}
}
class PercentageBasedDiscount implements DiscountCalculator {
private final double percentage;
public PercentageBasedDiscount(double percentage) {
this.percentage = percentage;
}
@Override
public double calculateDiscount(double totalPrice) {
return totalPrice * (percentage / 100);
}
}
// 上下文类,包含策略的选择和应用
class ShoppingCart {
private DiscountCalculator discountCalculator;
public void setDiscountCalculator(DiscountCalculator calculator) {
this.discountCalculator = calculator;
}
public double applyDiscount(double totalPrice) {
return discountCalculator.calculateDiscount(totalPrice);
}
}
public class Main {
public static void main(String[] args) {
// 创建并设置不同的策略
ShoppingCart cart = new ShoppingCart();
cart.setDiscountCalculator(new NoDiscount()); // 不打折
System.out.println(cart.applyDiscount(100)); // 输出100
cart.setDiscountCalculator(new FlatRateDiscount(0.1)); // 全场9折
System.out.println(cart.applyDiscount(100)); // 输出90
cart.setDiscountCalculator(new PercentageBasedDiscount(5)); // 五折优惠
System.out.println(cart.applyDiscount(100)); // 输出50
}
}
```
在这个例子中,`DiscountCalculator`是策略接口,`NoDiscount`, `FlatRateDiscount`, 和 `PercentageBasedDiscount` 是不同的策略类。`ShoppingCart` 类作为上下文,可以根据需要动态地切换不同的折扣策略。
阅读全文