在实际应用中,策略模式也经常与工厂模式一起使用。例如,我们可以使用工厂模式创建策略对象,从而使代码更加灵活和易于维护。示例代码如下:
代码语言:javascript复制// 工厂类
class SortFactory {
public static SortStrategy createSortStrategy(String strategyType) {
switch (strategyType) {
case "bubble":
return new BubbleSort();
case "quick":
return new QuickSort();
default:
throw new IllegalArgumentException("Invalid strategy type: " strategyType);
}
}
}
// 环境
class SortContext {
private SortStrategy strategy;
public SortContext(String strategyType) {
this.strategy = SortFactory.createSortStrategy(strategyType);
}
public void sort(int[] arr) {
strategy.sort(arr);
}
}
在这个示例中,我们定义了一个 SortFactory
工厂类,它根据输入的字符串参数返回一个具体的策略对象。然后我们修改了 SortContext
类的构造函数,使它使用工厂类来创建策略对象。这样,我们就可以通过修改工厂类来添加或删除策略对象,而不需要修改 SortContext
类的代码。
使用策略模式和工厂模式的组合,使得代码更加灵活和可维护。我们可以根据需要动态地选择算法,并通过工厂模式来创建相应的策略对象。这种设计模式的优点在于,它将算法实现和调用代码解耦,使得我们能够更加灵活地应对需求变化,同时保持代码的清晰和可维护性。