策略模式(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
机制更多用于框架的设计。策略模式 是对算法的封装,把一系列的算法分别封装到对应的类中,而且这些类实现相同的接口,相互之间能够替换。
策略模式 是一种简单经常使用的模式,咱们在进行开发的时候,会常常有意无心地使用它,通常来讲,策略模式 不会单独使用,跟 模版方法模式、工厂模式 等混合使用的状况比较多。