1. 程式人生 > >設計模式學習-策略模式

設計模式學習-策略模式

      策略模式(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();
	}
}

 

總結:策略模式首先確定一個演算法家族。他們都有一個共同的行為,但是達成行為的動作不一樣,客戶度通過策略的上下文的外部封裝類來決定引用哪一種演算法。

下面是程傑的 大鳥總結: