file-type

策略模式与工厂模式的代码实现解析

RAR文件

下载需积分: 3 | 10KB | 更新于2025-06-07 | 27 浏览量 | 2 下载量 举报 收藏
download 立即下载
策略模式是一种行为设计模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以互换。策略模式可以避免使用多重条件语句(if-else),让每个算法独立地变化。 在策略模式中,算法的切换是通过客户端代码来控制的,即在客户端确定要使用的具体算法,然后创建相应算法的实例,并把算法对象作为参数传递给某个上下文(Context)对象。上下文将负责执行算法,并且可以动态地在运行时更换算法。策略模式的关键在于引入了策略(Strategy)接口,这个接口定义了算法族,它们都实现了算法的某些共性。具体的算法实现则封装在具体策略类里。 工厂模式是一种创建型设计模式,用于创建对象而不必指定将要创建的对象的具体类。工厂模式常用于创建一系列相似或者相关类型的对象。它主要包含三种形式: 1. 简单工厂模式:由一个工厂对象决定创建出哪一种产品类的实例。 2. 工厂方法模式:定义一个创建对象的接口,但让实现这个接口的工厂类来决定实例化哪一个类。 3. 抽象工厂模式:创建一系列相关或相互依赖的对象,而无需指定它们具体的类。 当我们结合策略模式和工厂模式时,可以得到一个灵活且可扩展的代码结构,其中策略模式负责算法的动态切换,而工厂模式则负责策略对象的创建。这种组合可以让策略的增加、删除或修改变得简单,且不影响现有代码。 具体实现步骤通常如下: 1. 定义策略接口(Strategy):它声明了所有具体策略都必须实现的方法。 2. 实现具体策略类(Concrete Strategies):每个策略类实现了策略接口的算法。 3. 定义上下文类(Context):上下文类持有一个策略对象,并在执行算法时调用策略对象的特定方法。 4. 实现策略工厂类(Strategy Factory):它负责根据需要创建具体的策略对象。 假设我们要设计一个不同排序算法的框架,可以使用策略模式来定义排序算法,并使用工厂模式来创建具体的排序策略实例。 ```java // 策略接口 public interface SortStrategy { void sort(List<Integer> list); } // 具体策略:冒泡排序 public class BubbleSortStrategy implements SortStrategy { @Override public void sort(List<Integer> list) { // 实现冒泡排序逻辑 } } // 具体策略:快速排序 public class QuickSortStrategy implements SortStrategy { @Override public void sort(List<Integer> list) { // 实现快速排序逻辑 } } // 上下文 public class SortingContext { private SortStrategy strategy; public SortingContext(SortStrategy strategy) { this.strategy = strategy; } public void setStrategy(SortStrategy strategy) { this.strategy = strategy; } public void executeStrategy(List<Integer> list) { strategy.sort(list); } } // 策略工厂 public class SortStrategyFactory { public static SortStrategy getStrategy(String type) { switch (type) { case "bubble": return new BubbleSortStrategy(); case "quick": return new QuickSortStrategy(); default: return null; } } } ``` 使用时,我们首先通过工厂模式获取策略对象,然后将此策略对象应用到上下文中,并执行算法。 ```java List<Integer> list = Arrays.asList(5, 3, 9, 1, 7); SortStrategy strategy = SortStrategyFactory.getStrategy("quick"); SortingContext context = new SortingContext(strategy); context.executeStrategy(list); ``` 这样,我们就可以在不影响上下文的前提下灵活地更换排序算法。如果需要添加新的排序算法,只需实现SortStrategy接口,并通过SortStrategyFactory的getStrategy方法来使用它。 策略模式结合工厂模式的优势是提升了代码的灵活性和可维护性,策略的扩展不会影响到现有的系统结构,同时也使得算法的选择和算法的实现可以独立变化。这种模式经常被用在有多种算法,算法之间又需要动态切换的场景中。

相关推荐

JAVA涨薪基地
  • 粉丝: 1
上传资源 快速赚钱