在计算机科学中,设计模式是一种被广泛接受和应用的解决方案,用于解决软件设计中的常见问题,策略模式是其中的一种,它提供了一种在运行时改变对象行为的灵活方式,本文将详细介绍策略模式的概念、特点以及应用实践。
我们需要理解什么是策略模式,策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装在一个具有共同接口的独立类中,使得它们可以相互替换,策略模式让算法的变化独立于使用它们的客户端。
策略模式的主要角色有三个:上下文(Context)、策略(Strategy)和具体策略(ConcreteStrategy)。
1、上下文(Context):定义了环境,为策略提供一个操作对象的接口。
2、策略(Strategy):定义了一系列的算法,每个算法都封装在一个具有共同接口的独立类中。
3、具体策略(ConcreteStrategy):实现了策略接口,每一个具体策略类都实现了一组特定的方法。
策略模式的特点主要有以下几点:
1、提供了一种在运行时动态地选择算法的方法。
2、将算法的实现与使用它的客户端分离开来,使得它们可以独立变化。
3、使得系统的耦合度降低,提高了代码的可重用性和可维护性。
我们将通过一个实例来演示策略模式的应用实践,假设我们正在开发一个购物系统,系统需要根据用户的选择来计算商品的价格,在这个系统中,我们可以使用策略模式来实现不同的价格计算策略,如直接计算、打折计算等。
我们需要定义一个策略接口,如下所示:
public interface Strategy { double calculatePrice(double price); }
我们可以定义一些具体的策略类,如直接计算和打折计算:
public class DirectCalculateStrategy implements Strategy { @Override public double calculatePrice(double price) { return price; } } public class DiscountCalculateStrategy implements Strategy { private double discount; public DiscountCalculateStrategy(double discount) { this.discount = discount; } @Override public double calculatePrice(double price) { return price * (1 - discount); } }
我们需要定义一个上下文类,用于保存当前使用的策略对象,并提供一个方法来设置新的策略:
public class ShoppingContext { private Strategy strategy; public void setStrategy(Strategy strategy) { this.strategy = strategy; } public double getPrice() { return strategy.calculatePrice(100); // 这里假设原价为100元 } }
我们可以在客户端代码中使用策略模式来实现不同的价格计算逻辑:
public class Client { public static void main(String[] args) { ShoppingContext context = new ShoppingContext(); context.setStrategy(new DirectCalculateStrategy()); // 直接计算价格 System.out.println("直接计算后的价格为:" + context.getPrice()); context.setStrategy(new DiscountCalculateStrategy(0.8)); // 打八折后的价格计算策略 System.out.println("打八折后的价格为:" + context.getPrice()); } }