策略模式(Strategy Pattern)屬於對象的行爲模式。其用意是針對一組算法,將每個算法封裝到具備共同接口的獨立的類中,從而使得它們能夠相互替換。策略模式使得算法能夠在不影響到客戶端的狀況下發生變化。java
策略模式是對算法的包裝,是把使用算法的責任和算法自己分割開來,委派給不一樣的對象管理。策略模式一般把一個系列的算法包裝到一系列的策略類裏面,做爲一個抽象策略類的子類。用一句話來講,就是:「準備一組算法,並將每個算法封裝起來,使得它們能夠互換」。算法
策略模式及到三個角色:微信
在電商系統中,一般會集成多種支付方式。下面以一個支付調用例子演示下策略模式。框架
抽象角色:ide
public interface IPayStrategy {
/** * 調用支付 */
void doPay();
}
複製代碼
具體策略模式:微信支付
// 支付寶支付
public class AliPayStrategy implements IPayStrategy {
@Override
public void doPay() {
System.out.println("調用支付寶支付~");
}
}
// 微信支付
public class WxPayStrategy implements IPayStrategy {
@Override
public void doPay() {
System.out.println("調用微信支付~");
}
}
複製代碼
上下文角色:this
public class PayContext {
private IPayStrategy payStrategy;
public PayContext(IPayStrategy payStrategy) {
this.payStrategy = payStrategy;
}
/** * 策略方法 */
public void doPay() {
payStrategy.doPay();
}
}
複製代碼
客戶端:spa
public class Client {
@Test
public void testPay() {
PayContext context;
//調用支付寶支付
context = new PayContext(new AliPayStrategy());
context.doPay();
// 調用微信支付
context = new PayContext(new WxPayStrategy());
context.doPay();
}
}
複製代碼
結果:設計
調用支付寶支付~
調用微信支付~
複製代碼
SPI
機制其實與 策略模式 相似。SPI
機制是 Java
中使用的一種技術實現,全稱是 Service Provider Interface
,即服務提供接口,通常用在開源框架研發領域。code
策略模式
與 SPI
機制有下面幾點異同:
SPI
機制其思想是相似的,都是經過必定的設計隔離變化的部分,從而讓原有部分更加穩定;SPI
機制是項目級別的隔離;SPI
機制更多用於框架的設計。策略模式 是對算法的封裝,把一系列的算法分別封裝到對應的類中,而且這些類實現相同的接口,相互之間能夠替換。
策略模式 是一種簡單經常使用的模式,咱們在進行開發的時候,會常常有意無心地使用它,通常來講,策略模式 不會單獨使用,跟 模版方法模式、工廠模式 等混合使用的狀況比較多。