编程自学指南:java程序设计开发,设计思想开源框架-行为型模式:策略模式、观察者模式、责任链模式、状态模式,用于处理对象之间的交互和职责分配,帮助对象之间更好地协作,以实现更复杂的行为

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zl515035644

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值