在计算机科学中,设计模式是一种被广泛接受并用于解决特定问题的优秀解决方案,它们提供了一种在不修改代码的情况下增加新功能的方法,我们将讨论一种非常有用的设计模式——策略模式。
策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装在一个具有共同接口的独立类中,使得它们可以相互替换,策略模式让算法的变化独立于使用它们的客户端。
策略模式的主要优点如下:
1、提高了代码的可重用性:通过将算法封装在独立的类中,可以在不影响其他部分的情况下改变算法。
2、提高了代码的可读性和可维护性:策略模式的清晰结构使得代码更容易理解和维护。
3、提高了代码的灵活性:策略模式允许在运行时动态地选择算法,这使得系统更加灵活。
我们将通过一个实例来详细解释策略模式的工作原理,假设我们有一个电商系统,需要根据不同的促销活动计算折扣,我们可以使用策略模式来实现这个需求。
我们需要定义一个表示促销活动的接口,以及一个表示折扣计算策略的抽象类。
public interface DiscountStrategy { double calculateDiscount(double originalPrice); } public abstract class DiscountStrategyImpl implements DiscountStrategy { @Override public abstract double calculateDiscount(double originalPrice); }
我们可以为每种促销活动创建一个具体的折扣策略类,我们可以创建一个满减策略和一个免邮策略。
public class FullReductionStrategy extends DiscountStrategyImpl { @Override public double calculateDiscount(double originalPrice) { return originalPrice * 0.8; // 满100减20 } } public class NoShippingStrategy extends DiscountStrategyImpl { @Override public double calculateDiscount(double originalPrice) { return originalPrice; // 不享受任何折扣,也不免邮费 } }
我们需要创建一个上下文类,用于管理不同的折扣策略,在这个上下文类中,我们可以使用策略模式来根据不同的促销活动选择合适的折扣策略。
public class ShoppingCartContext { private DiscountStrategy discountStrategy; public void setDiscountStrategy(DiscountStrategy discountStrategy) { this.discountStrategy = discountStrategy; } public double getDiscountedPrice(double originalPrice) { return discountStrategy.calculateDiscount(originalPrice); } }
我们可以在客户端代码中使用这个上下文类来计算折扣后的价格。
public class Main { public static void main(String[] args) { ShoppingCartContext shoppingCartContext = new ShoppingCartContext(); shoppingCartContext.setDiscountStrategy(new FullReductionStrategy()); // 设置满减策略 double originalPrice = 100; // 原价为100元的商品 double discountedPrice = shoppingCartContext.getDiscountedPrice(originalPrice); // 计算折扣后的价格,结果为80元(满100减20) System.out.println("原价:" + originalPrice + "元"); // 输出原价为100元的商品信息 System.out.println("折扣价:" + discountedPrice + "元"); // 输出折扣价为80元的商品信息 } }