策略模式屬于對象的
行為模式。
其用意是
針對一組算法,將每一個算法封裝到具有共同接口的獨立的類中,從而使得它們可以相互替換。
策略模式的結構:
應當由客戶端自己決定在什么情況下使用什么具體策略模式。
策略模式不適合于處理同時嵌套多于一個算法的情形。
何時使用?
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();
}
}