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