TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
一、策略模式介绍
策略模式(Strategy模式)是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。 策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。
一句话来形容:准备一组算法,并将每一个算法封装起来,使得他们可以互换
二、策略模式的结构
策略模式涉及到如下三个角色:
环境角色:持有一个Strategy类(策略类)的引用
抽象策略角色:策略类,通常由一个接口或者抽象类实现
具体策略角色:包装了相关的算法和行为
三、策略模式的优缺点
3.1策略模式的优点
提供了管理相关的算法族的办法。
提供了可以替换继承关系的办法。
避免使用多重条件转移语句
3.2策略模式的缺点
客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
造成很多的策略类。 四、策略模式的应用举例
在此使用了7个java类来描述说明Strategy设计模式;
1、SortStrategy.java 排序算法策略接口
2、SortBin.java 二分法排序
3、SortBubble.java 冒泡排序
4、SortHeap.java 堆排序
5、SortQuick.java 快速排序
6、Sorter.java 排序算法使用者
7、SortTest.java 带有main方法的测试类- 1、SortStrategy.java
- import java.util.List;
- public interface SortStrategy< T> {
- public void sort(List< T> list);
- }
- 2、SortBin.java
- import java.util.List;
- public class SortBin< T> implements SortStrategy< T> {
- public void sort(List< T> list) {
- // sorting logic code here
- System.out.println("This is bin sort."); }
- }
- 3、SortBubble.java
- import java.util.List;
- public class SortBubble< T> implements SortStrategy< T> {
- public void sort(List< T> list) {
- System.out.println("This is bubble sort.");
- }
- 4、SortHeap.java
- import java.util.List;
- public class SortHeap< T> implements SortStrategy< T> {
- public void sort(List< T> list) {
- // sorting logic code here
- System.out.println("This is heap sort."); }
- 5、SortQuick.java
- import java.util.List;
- public class SortQuick< T> implements SortStrategy< T> {
- public void sort(List< T> list) {
- // sorting logic code here
- System.out.println("This is quick sort."); }
- 6、Sorter.java
- import java.util.List;
- public class Sorter< T> {
- private SortStrategy< T> strategy;
- private Sorter(){}
- //通过构造器传入排序策略
- public Sorter(SortStrategy< T> strategy){
- if(strategy == null )
- strategy = new SortQuick< T>();
- this.strategy = strategy;
- }
-
- public void sort(List< T> list){
- this.strategy.sort(list);
- }
- }
- 7、SortTest.java 测试类
- import java.util.ArrayList;
- import java.util.List;
- public class SortTest {
- public static void main(String[] args) {
- List< Integer> input = new ArrayList< Integer>();
- input.add(8);
- input.add(3);
- input.add(5);
- input.add(2);
- input.add(1);
- input.add(12);
- input.add(9);
-
- Sorter< Integer> sorter = new Sorter< Integer>(new SortBin< Integer>());
- sorter.sort(input);
- sorter = new Sorter< Integer>(new SortBubble< Integer>());
- sorter.sort(input);
- sorter = new Sorter< Integer>(new SortHeap< Integer>());
- sorter.sort(input);
- sorter = new Sorter< Integer>(new SortQuick< Integer>());
- sorter.sort(input);
- }
- }
复制代码 |
|