java程序设计开发,设计思想开源框架-行为型模式,用于处理对象之间的交互和职责分配,帮助对象之间更好地协作,以实现更复杂的行为。以下是几种常见的行为型模式的学习笔记:
策略模式(Strategy Pattern)
定义
策略模式定义了一系列的算法,并将每个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户端。
核心角色
- 策略接口(Strategy):定义了所有支持的算法的公共接口。
- 具体策略类(Concrete Strategy):实现了策略接口,包含具体的算法实现。
- 上下文类(Context):持有一个策略接口的引用,负责根据需要选择和使用具体的策略。
实际应用案例
在电商系统中,根据不同的促销活动(如满减、折扣)计算商品的最终价格。
// 策略接口
interface PromotionStrategy {
double calculatePrice(double originalPrice);
}
// 具体策略类:满减策略
class FullReductionStrategy implements PromotionStrategy {
private double fullAmount;
private double reductionAmount;
public FullReductionStrategy(double fullAmount, double reductionAmount) {
this.fullAmount = fullAmount;
this.reductionAmount = reductionAmount;
}
@Override
public double calculatePrice(double originalPrice) {
if (originalPrice >= fullAmount) {
return originalPrice - reductionAmount;
}
return originalPrice;
}
}
// 具体策略类:折扣策略
class DiscountStrategy implements PromotionStrategy {
private double discountRate;
public DiscountStrategy(double discountRate) {
this.discountRate = discountRate;
}
@Override
public double calculatePrice(double originalPrice) {
return originalPrice * discountRate;
}
}
// 上下文类
class ShoppingCart {
private PromotionStrategy strategy;
public ShoppingCart(PromotionStrategy strategy) {
this.strategy = strategy;
}
public void setStrategy(PromotionStrategy strategy) {
this.strategy = strategy;
}
public double checkout(double originalPrice) {
return strategy.calculatePrice(originalPrice);
}
}
// 客户端代码
public class StrategyPatternExample {
public static void main(String[] args) {
// 使用满减策略
PromotionStrategy fullReduction = new FullReductionStrategy(200, 50);
ShoppingCart cart1 = new ShoppingCart(fullReduction);
double finalPrice1 = cart1.checkout(300);
System.out.println("使用满减策略,最终价格: " + finalPrice1);
// 使用折扣策略
PromotionStrategy discount = new DiscountStrategy(0.8);
ShoppingCart cart2 = new ShoppingCart(discount);
double finalPrice2 = cart2.checkout(300);
System.out.println("使用折扣策略,最终价格: " + finalPrice2);
}
}
案例详细解析
- 策略接口
PromotionStrategy
:定义了计算商品最终价格的方法calculatePrice
。 - 具体策略类
FullReductionStrategy
和DiscountStrategy