本文目录导读:
策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,并将每个算法封装在一个具有共同接口的独立类中,使得它们可以相互替换,策略模式让算法的变化独立于使用它的客户端。
策略模式简介
策略模式是一种结构型设计模式,它主要用于在运行时根据不同的条件选择不同的算法或者策略来执行,策略模式的主要优点是可以在不修改原有代码的情况下,通过引入新的策略来扩展原有的功能,策略模式通常用于解决同一事物在不同条件下表现出不同行为的问题。
策略模式的构成
1、抽象策略(Strategy):定义所有支持的算法的公共接口。
2、具体策略(Concrete Strategy):实现抽象策略中的操作,提供具体的算法实现。
3、上下文(Context):持有一个策略类的引用,提供一个访问策略的方法。
下面我们通过一个简单的例子来说明策略模式的使用,假设我们要实现一个电商系统中的商品推荐功能,可以根据用户的购物历史和浏览记录为用户推荐不同类型的商品,这里的商品类型可以看作是一个策略,我们需要根据用户的喜好来选择合适的商品类型。
策略模式的实现
1、我们需要定义一个抽象策略类,表示商品类型,这个类包含一个方法,用于计算商品的评分。
public interface ProductTypeStrategy { double calculateScore(List<Product> products); }
2、我们可以为每种商品类型创建一个具体策略类,实现上面定义的抽象策略接口,这些具体策略类可以根据自己的特点来计算商品的评分。
public class HotProductTypeStrategy implements ProductTypeStrategy { @Override public double calculateScore(List<Product> products) { // 实现热门商品类型的评分计算逻辑 } } public class NewProductTypeStrategy implements ProductTypeStrategy { @Override public double calculateScore(List<Product> products) { // 实现新品商品类型的评分计算逻辑 } }
3、我们需要定义一个上下文类,用于存储当前使用的策略类的引用,并提供一个方法,用于设置当前使用的策略类。
public class ProductRecommendationContext { private ProductTypeStrategy productTypeStrategy; public void setProductTypeStrategy(ProductTypeStrategy productTypeStrategy) { this.productTypeStrategy = productTypeStrategy; } public double recommendProducts() { return productTypeStrategy.calculateScore(products); } }
4、在客户端代码中,我们可以根据用户的喜好选择合适的策略类,并将其设置到上下文对象中,然后调用上下文对象的recommendProducts方法,就可以得到推荐的商品列表。
public static void main(String[] args) { // 根据用户喜好选择合适的策略类,并将其设置到上下文对象中 ProductRecommendationContext context = new ProductRecommendationContext(); context.setProductTypeStrategy(new HotProductTypeStrategy()); // 或者 new NewProductTypeStrategy(); // 获取推荐的商品列表并输出结果 List<Product> recommendedProducts = context.recommendProducts(); for (Product product : recommendedProducts) { System.out.println("推荐商品:" + product.getName()); } }
通过以上示例,我们可以看到策略模式可以帮助我们在不修改原有代码的情况下,轻松地扩展系统的功能,策略模式也使得系统的耦合度降低,提高了代码的可维护性和可扩展性。