1、模式介绍:
策略模式是一种行为设计模式,它定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
2、应用场景:
当一个对象有多种行为,而需要动态选择一种行为时。
不同的策略可以实现不同的行为,客户端根据需要在运行时选择合适的策略。
当需要避免使用大量的条件判断语句来选择不同的行为时,可以使用策略模式来提高代码的可维护性。
3、优点:
策略模式提供了一种可以替换继承关系的方法,可以独立于客户端改变算法,易于扩展。
可以避免使用多重条件语句。
策略类之间可以自由切换,易于修改和测试。
4、缺点:
客户端必须了解所有的策略,并在适当的时候选择合适的策略,增加了客户端的复杂度。
策略模式会造成很多的策略类,增加了系统的对象数量。
5、代码示例:
/**
* 排序策略接口
*
* @author FM_南风
* @date 2024/7/3
*/
interface SortingStrategy {
void sort(int[] data);
}
/**
* 冒泡策略
*
* @author FM_南风
* @date 2024/7/3
*/
public class BubbleSortStrategy implements SortingStrategy{
@Override
public void sort(int[] data) {
// 冒泡排序算法实现
System.out.println("使用冒泡算法实现");
}
}
/**
* 快速排序实现
*
* @author FM_南风
* @date 2024/7/3
*/
public class QuickSortStrategy implements SortingStrategy{
@Override
public void sort(int[] data) {
// 快速排序算法实现
System.out.println("快速排序算法实现");
}
}
/**
* 环境类(Context)
*
* @author FM_南风
* @date 2024/7/3
*/
public class Sorter {
private SortingStrategy strategy;
public Sorter(SortingStrategy strategy) {
this.strategy = strategy;
}
public void setStrategy(SortingStrategy strategy) {
this.strategy = strategy;
}
public void performSort(int[] data) {
strategy.sort(data);
}
}
/**
* 应用
*
* @author FM_南风
* @date 2024/7/3
*/
public class StrategyClient {
public static void main(String[] args) {
int[] data = {5, 1, 3, 6, 4, 2};
Sorter sorter = new Sorter(new BubbleSortStrategy());
sorter.performSort(data); // 使用冒泡排序策略
sorter.setStrategy(new QuickSortStrategy());
sorter.performSort(data); // 使用快速排序策略
}
}