策略模式(Strategy模式)是行爲模式之一,它對一系列的算法加以封裝,爲所有算法定義一個抽象的算法接口,並通過繼承該抽象算法接口對所有的算法加以封裝和實現,具體的算法選擇交由客戶端決定(策略)。Strategy模式主要用來平滑地處理算法的切換 。切換算法不會影響使用算法的客戶。
下面是在 程傑《大話設計模式》中截的圖(書寫的特別有意思),來描述策略模式的結構
Strategy 是定義一個算法的公共接口;
然後算法A、B、C implements Strategy 實現具體的算法;
Context維護一個Strategy對象的引用,是策略的外部封裝類,或者說策略的容器類。根據不同策略執行不同的行爲。
下面來看代碼:
1、Strategy接口
public interface Strategy {
//加密
public void encrypt();
}
2、具體算法實現類
public class MD5Strategy implements Strategy{
public void encrypt() {
System.out.println("執行MD5加密");
}
}
public class MDSStrategy implements Strategy{
public void encrypt() {
System.out.println("執行MDS加密");
}
}
3、上下文對象
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void encrypt() {
this.strategy.encrypt();
}
}
4、客戶端使用
public class MainClass {
public static void main(String[] args) {
// 客戶端確定算法
Context context = new Context(new MDSStrategy());
context.encrypt();
}
}
總結:策略模式首先確定一個算法家族。他們都有一個共同的行爲,但是達成行爲的動作不一樣,客戶度通過策略的上下文的外部封裝類來決定引用哪一種算法。
下面是程傑的 大鳥總結: