文章目录
前言
本篇介绍使用策略模式实现支付方式的改变,算法封装在各个算法里边,如需增加支付方式直接增加一个实现策略实现支付接口的类,调用传入新增的支付方式即可。
一、策略模式
分别封装行为接口,实现算法族超类里放对象在子具体 设定行为对象。原则就是:分离变化部,封装接口基于编程各种功能此模式让行 为的 变化独立于算法的使用者。
二、策略模式示例代码
定义支付策略
1.支付策略
支付策略实现一个接口,支付接口。
/**
* 支付策略
*/
public interface PayStrategy {
/**
* 支付
* @param payMode 支付方式
* @param money 支付金额
*/
void pay(String payMode,BigDecimal money);
}
2.具体支付策略实现
支付宝支付:
/**
* 支付宝支付
*/
public class AliPay implements PayStrategy{
@Override
public void pay(String payMode, BigDecimal money) {
System.out.println("支付方式:"+payMode+",支付金额:"+money);
}
}
微信支付:
/**
* 微信支付
*/
public class WechatPay implements PayStrategy{
@Override
public void pay(String payMode, BigDecimal money) {
System.out.println("支付方式:"+payMode+",支付金额:"+money);
}
}
银行卡支付:
/**
* 银行支付
*/
public class BankPay implements PayStrategy{
@Override
public void pay(String payMode, BigDecimal money) {
System.out.println("支付方式:"+payMode+",支付金额:"+money);
}
}
3.策略执行对象
/**
* 支付
*/
public class Context {
PayStrategy payStrategy;
public Context(PayStrategy payStrategy) {
this.payStrategy = payStrategy;
}
/**
* 执行支付策略
* @param payMode
* @param amt
*/
public void executeStrategy(String payMode, BigDecimal amt){
payStrategy.pay(payMode, amt);
}
}
4.测试
/**
* 测试
*/
public class Client {
public static void main(String[] args) {
System.out.println("=====支付宝支付========");
Context applicationContext = new Context( new AliPay());
applicationContext.executeStrategy("支付宝",new BigDecimal("100.0"));
System.out.println("=====支付宝支付========");
System.out.println("=====微信支付========");
applicationContext = new Context(new WechatPay());
applicationContext.executeStrategy("微信",new BigDecimal("200.0"));
System.out.println("=====微信支付========");
System.out.println("=====银行支付========");
applicationContext = new Context(new BankPay());
applicationContext.executeStrategy("银行卡",new BigDecimal("300.0"));
System.out.println("=====银行支付========");
}
}
测试结果
=====支付宝支付========
支付方式:支付宝,支付金额:100.0
=====支付宝支付========
=====微信支付========
支付方式:微信,支付金额:200.0
=====微信支付========
=====银行支付========
支付方式:银行卡,支付金额:300.0
=====银行支付========
总结
策略设计模式体现了几个设计原则,第一、把变化的代码从不中分离出来;第二、面对接口编程;三多用组合/聚合, 少用继承。