策略模式(Strategy Pattern)是一種行為型設計模式,它定義了一系列算法,並將每個算法封裝起來,使之可以相互替換。策略模式可以使算法的變化獨立於使用它們的客戶端。
在策略模式中,通常會有一個抽象策略接口或者抽象策略類,用於定義算法的方法。然後,具體的策略類實現該接口或者繼承該抽象類,實現不同的算法邏輯。
策略模式的關鍵就是將算法抽象成不同的策略類,並使用組合或者繼承的方式,在客戶端代碼中動態地切換算法。
下面是一個策略模式的簡單示例:
// 定義抽象策略接口
public interface SortingStrategy {
void sort(int[] array);
}
// 具體策略類1:冒泡排序算法
public class BubbleSort implements SortingStrategy {
@Override
public void sort(int[] array) {
System.out.println("Sorting array using Bubble Sort");
// 冒泡排序算法邏輯
}
}
// 具體策略類2:快速排序算法
public class QuickSort implements SortingStrategy {
@Override
public void sort(int[] array) {
System.out.println("Sorting array using Quick Sort");
// 快速排序算法邏輯
}
}
// 環境類:使用策略的客戶端
public class SortClient {
private SortingStrategy sortingStrategy;
public SortClient(SortingStrategy strategy) {
this.sortingStrategy = strategy;
}
public void setSortingStrategy(SortingStrategy strategy) {
this.sortingStrategy = strategy;
}
public void sortArray(int[] array) {
sortingStrategy.sort(array);
}
}
// 使用示例
public class Main {
public static void main(String[] args) {
int[] array = {5, 2, 7, 8, 1};
SortClient client = new SortClient(new BubbleSort());
client.sortArray(array); // Output: Sorting array using Bubble Sort
client.setSortingStrategy(new QuickSort());
client.sortArray(array); // Output: Sorting array using Quick Sort
}
}
在上面的示例中,SortingStrategy 是抽象策略接口,定義了排序算法的方法 sort。BubbleSort 和 QuickSort 是具體策略類,分別實現了冒泡排序和快速排序算法的具體邏輯。
SortClient 是環境類,使用策略的客戶端。它持有一個 SortingStrategy 對象,可以在運行時切換具體的策略,並調用 sortArray 方法對數組進行排序。
通過使用策略模式,客戶端代碼與具體的算法實現解耦,客戶端隻需要知道如何使用 SortClient 類即可,而不需要關心具體的排序算法是什麼。如果需要增加新的排序算法,隻需要添加相應的策略類即可,而不需要修改客戶端代碼。
策略模式在實際應用中經常用於將復雜的業務邏輯拆分成不同的策略,使得每個策略都可以單獨測試和維護,並且可以靈活地組合使用不同的策略。