Java设计模式-策略模式(Strategy)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本篇介绍使用策略模式实现支付方式的改变,算法封装在各个算法里边,如需增加支付方式直接增加一个实现策略实现支付接口的类,调用传入新增的支付方式即可。

一、策略模式

分别封装行为接口,实现算法族超类里放对象在子具体 设定行为对象。原则就是:分离变化部,封装接口基于编程各种功能此模式让行 为的 变化独立于算法的使用者。

二、策略模式示例代码

定义支付策略

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
=====银行支付========

总结

策略设计模式体现了几个设计原则,第一、把变化的代码从不中分离出来;第二、面对接口编程;三多用组合/聚合, 少用继承。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小刘同学要加油呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值