策略模式属于对象的
行为模式。
其用意是
针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。
策略模式的结构:
应当由客户端自己决定在什么情况下使用什么具体策略模式。
策略模式不适合于处理同时嵌套多于一个算法的情形。
何时使用?
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();
}
}