设计模式-策略模式(一)

2023-05-05 13:56:54 浏览数 (1)

策略模式是一种设计模式,它允许在运行时选择算法的行为。策略模式定义了一系列算法,每个算法都完成了相同的任务,但它们使用不同的实现方法。这使得我们能够根据需要灵活地选择要使用的算法,而不必在代码中固定地指定一个算法。

策略模式包括以下角色:

  • 环境(Context):包含一个指向策略对象的引用,并调用策略对象的方法。
  • 抽象策略(Strategy):定义了一个公共接口,所有具体策略都要实现这个接口。
  • 具体策略(Concrete Strategy):实现了抽象策略定义的接口,提供了具体的算法实现。

下面是一个使用策略模式的 Java 示例。假设我们有一个算法接口 SortStrategy,并有两个实现 BubbleSortQuickSort。我们还有一个 SortContext 类,它包含一个指向 SortStrategy 的引用,并可以根据需要切换策略。示例代码如下:

代码语言:javascript复制
// 抽象策略
interface SortStrategy {
    public void sort(int[] arr);
}

// 具体策略 1
class BubbleSort implements SortStrategy {
    public void sort(int[] arr) {
        // 实现冒泡排序
    }
}

// 具体策略 2
class QuickSort implements SortStrategy {
    public void sort(int[] arr) {
        // 实现快速排序
    }
}

// 环境
class SortContext {
    private SortStrategy strategy;

    public void setStrategy(SortStrategy strategy) {
        this.strategy = strategy;
    }

    public void sort(int[] arr) {
        strategy.sort(arr);
    }
}

在这个示例中,我们定义了一个 SortStrategy 接口,其中有一个 sort 方法用于排序。我们还有两个具体的策略实现 BubbleSortQuickSort,它们分别实现了 sort 方法。然后我们定义了一个 SortContext 类,它包含一个 SortStrategy 引用,并可以使用 setStrategy 方法在运行时切换策略。最后,我们调用 sort 方法来使用当前选择的策略对数组进行排序。

使用策略模式的好处在于,它使得算法实现和调用代码分离,从而使得代码更加灵活和可维护。如果我们需要添加一个新的排序算法,只需要实现 SortStrategy 接口并提供具体的实现即可,而不需要修改 SortContext 类的代码。这种灵活性使得策略模式成为许多复杂应用程序中的重要设计模式。

0 人点赞