设计模式——策略模式

1. 引言

在软件开发中,我们经常需要实现一些算法或策略,而这些算法可能会随着需求的变化而改变。策略模式就是为了应对这种情况而生的,它提供了一种灵活且可扩展的方式来管理和切换不同的算法。

2. 什么是策略模式?

策略模式(Strategy Pattern)是一种行为型设计模式,它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户端。

3. 策略模式的结构

策略模式主要包含以下三个角色:

  1. Context(上下文): 持有一个Strategy的引用
  2. Strategy(抽象策略类): 定义了一个公共接口,各种不同的算法以不同的方式实现这个接口
  3. ConcreteStrategy(具体策略类): 实现了Strategy接口的具体算法

4. 策略模式的实现

一个电商系统,需要根据不同的会员等级提供不同的折扣策略。

首先,定义一个折扣策略接口:

public interface DiscountStrategy {
   
   
    double applyDiscount(double price);
}

然后,实现几个具体的折扣策略:

// 普通会员折扣
public class RegularDiscountStrategy implements DiscountStrategy {
   
   
    @Override
    public double applyDiscount(double price) {
   
   
        return price * 0.95; // 5%折扣
    }
}

// 黄金会员折扣
public class GoldDiscountStrategy implements DiscountStrategy {
   
   
    @Override
    public double applyDiscount(double price) {
   
   
        return price * 0.9; // 10%折扣
    }
}

// 白金会员折扣
public class PlatinumDiscountStrategy implements DiscountStrategy {
   
   
    @Override
    public double applyDiscount(double price) {
   
   
        return price * 0.85; // 15%折扣
    }
}

接下来,创建一个上下文类来使用这些策略:

public class ShoppingCart {
   
   
    private DiscountStrategy discountStrategy;

    public void setDiscountStrategy(DiscountStrategy discountStrategy) {
   
   
        this.discountStrategy = discountStrategy;
    }

    public double checkout(double price) {
   
   
        if (discountStrategy == null) {
   
   
            return price;
        }
        return discountStrategy.applyDiscount(price);
    }
}

最后,可以在客户端代码中使用这个购物车ShoppingCart :

public class Client {
   
   
    public static void main(String[] args) {
   
   
        ShoppingCart cart = new ShoppingCart();
        
        // 普通会员购物
        cart.setDiscountStrategy(new RegularDiscountStrategy());
        System.out.println("Regular member's price: " + cart.checkout(100)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值