策略模式
策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。
- 定义了一组算法(业务规则);
- 封装了每个算法;
- 这组的算法可互换代替(interchangeable)。
优点:
- 算法可以自由切换
- 避免使用多重条件判断
- 扩展性良好
缺点:
- 策略类会增多
- 所有策略类都需要对外暴露
应用场景:
1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。
3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立
策略模式在支付系统的使用
PayStrategy
public interface PayStrategy { public void pay(Object obj);}
微信支付
public class WechatPayStrategy implements PayStrategy{ @Override public void pay(Object obj) { System.out.println("do wechat pay"); }}
支付宝支付
public class AliPayStrategy implements PayStrategy{ @Override public void pay(Object obj) { System.out.println("do alipay"); }}
context
public class Context { private PayStrategy payStrategy; public Context(PayStrategy payStrategy){ this.payStrategy = payStrategy; } public void executeStrategy(Object obj){ return strategy.pay(obj); }}
StrategyPatternDemo
public class StrategyPatternDemo { public static void main(String[] args) { Object wechatPayObj = new Object(); Context context = new Context(new WechatPayStrategy()); context.executeStrategy(wechatPayObj); Object aliPayObj = new Object(); context = new Context(new AliPayStrategy()); context.executeStrategy(aliPayObj); }}