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