設計模式學習-策略模式
阿新 • • 發佈:2018-11-24
策略模式(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(); } }
總結:策略模式首先確定一個演算法家族。他們都有一個共同的行為,但是達成行為的動作不一樣,客戶度通過策略的上下文的外部封裝類來決定引用哪一種演算法。
下面是程傑的 大鳥總結: