策略模式

    xiaoxiao2021-03-25  71

    策略模式

          策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化,也称为政策模式(Policy)。

    实现策略模式的步骤:

    1、定义策略接口2、创建多个类(多个策略)实现策略接口3、创建一个策略者,用于提供不同的策略

    这里就拿排序算法来举例子:

    因为排序的算法有多种,所以这里简单模拟一个排序算法的策略模式

    类图:

    策略模式的实现

    排序接口(定义一个排序接口,用于实现多种排序算法)

    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(); } }

    转载请注明原文地址: https://ju.6miu.com/read-35028.html

    最新回复(0)