策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化,也称为政策模式(Policy)。
这里就拿排序算法来举例子:
因为排序的算法有多种,所以这里简单模拟一个排序算法的策略模式类图:
Sort.java
package com.lingdu.strategy; /** * 排序的接口 * @author LingDu */ public interface Sort { /** * 需要实现的排序算法 */ public void sortingAlgorithm(); }具体的三个实现类:
这里主要演示的是怎么使用策略模式,而不是算法的具体实现,所以算法部分只打印一句话。BubbleSort.java
package com.lingdu.strategy; /** * 冒泡排序的实现类 * @author LingDu */ public class BubbleSort implements Sort { /** * 冒泡排序具体的实现 */ @Override public void sortingAlgorithm() { System.out.println("使用冒泡排序算法。"); } }InsertionSort.java
package com.lingdu.strategy; /** * 插入排序 * @author LingDu */ public class InsertionSort implements Sort { /** * 插入排序的具体实现 */ @Override public void sortingAlgorithm() { System.out.println("使用插入排序算法。"); } }SelectionSort.java
package com.lingdu.strategy; /** * 选择排序算法 * @author LingDu */ public class SelectionSort implements Sort { /** * 选择排序的具体实现 */ @Override public void sortingAlgorithm() { System.out.println("使用选择排序算法。"); } }AlgorithmStrategy.java
package com.lingdu.strategy; /** * 算法的策略者 * 这个类决定使用哪种排序算法 * @author LingDu */ public class AlgorithmStrategy { /** * 排序的接口 */ private Sort sort; /** * 设置排序策略 * @param sort */ public void setSort(Sort sort){ this.sort = sort; } /** * 执行策略的方法 */ public void sortingAlgorithm(){ sort.sortingAlgorithm(); } }Test.java
package com.lingdu.strategy; public class Test { public static void main(String[] args) { // 创建一个算法策略对象 AlgorithmStrategy strategy = new AlgorithmStrategy(); // 设置冒泡排序的策略 strategy.setSort(new BubbleSort()); // 调用该策略的算法 strategy.sortingAlgorithm(); // 设置插入排序的策略 strategy.setSort(new InsertionSort()); strategy.sortingAlgorithm(); // 设置选择排序的策略 strategy.setSort(new SelectionSort()); strategy.sortingAlgorithm(); } }