策略模式屬于對象的行為模式
其用意是針對一組算法,將每一個算法封裝到具有共同接口的獨立的類中,從而使得它們可以相互替換

策略模式的結構:













應當由客戶端自己決定在什么情況下使用什么具體策略模式。

策略模式不適合于處理同時嵌套多于一個算法的情形。

何時使用?
1. 一個系統需要動態地讓一個對象在許多行為中選擇一種行為。
2. 一個系統需要動態地在幾種算法中選擇一種。
3. 一個系統的算法使用的數據不可以讓客戶端知道。
4. 避免使用難以維護的多重條件選擇語句。

優點:
1. 提供了管理相關的算法族的辦法。
2. 提供了可以替換繼承關系的辦法。
3. 可以避免使用多重條件轉移語句。

缺點:
1. 客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。
2. 策略模式造成很多的策略類。

與其他模式的關系:
建造(Builder)模式
適配器(Adapter)模式
享元(Flyweight)模式
模板(Template)模式
MVC模式
裝飾(Decorator)模式

1. com.cleversoft.designpatterns.behavioral.strategy.Sorter.java:
package com.cleversoft.designpatterns.behavioral.strategy;

public class Sorter {
    
public void sort() {
        sortStrategy.sort();
    }

    
public void setSortStrategy(SortStrategy sort) {
        
this.sortStrategy = sort;
    }

    
private SortStrategy sortStrategy;
}

2. com.cleversoft.designpatterns.behavioral.strategy.SortStrategy.java:
package com.cleversoft.designpatterns.behavioral.strategy;

public abstract class SortStrategy {
    
public abstract void sort();
}

3. com.cleversoft.designpatterns.behavioral.strategy.RadixSort.java:
package com.cleversoft.designpatterns.behavioral.strategy;

public class RadixSort extends SortStrategy {
    
public void sort() {
        System.out.println(
"Radix Sort!");
    }
}

4. com.cleversoft.designpatterns.behavioral.strategy.QuickSort.java:
package com.cleversoft.designpatterns.behavioral.strategy;

public class QuickSort extends SortStrategy {
    
public void sort() {
        System.out.println(
"Quick Sort!");
    }
}

5. com.cleversoft.designpatterns.behavioral.strategy.HeapSort.java:
package com.cleversoft.designpatterns.behavioral.strategy;

public class HeapSort extends SortStrategy {
    
public void sort() {
        System.out.println(
"Heap Sort!");
    }
}

6. com.cleversoft.designpatterns.behavioral.strategy.BubbleSort.java:
package com.cleversoft.designpatterns.behavioral.strategy;

public class BubbleSort extends SortStrategy {
    
public void sort() {
        System.out.println(
"Bubble Sort!");
    }
}

7. com.cleversoft.designpatterns.behavioral.strategy.Client.java:
package com.cleversoft.designpatterns.behavioral.strategy;

public class Client {

    
/**
     * 
@param args
     * 
@author qixiang
     
*/
    
public static void main(String[] args) {
        SortStrategy sortStrategy 
= new HeapSort();
        Sorter sorter 
= new Sorter();
        sorter.setSortStrategy(sortStrategy);
        sorter.sort();
    }

}



歡迎大家訪問我的個人網站 萌萌的IT人