我是「猿码天地」,一个热爱技术、热爱编程的IT猿。技术是开源的,知识是共享的!

写作是对自己学习的总结和记录,如果您对 Java、分布式、微服务、中间件、Spring Boot、Spring Cloud等技术感兴趣,可以关注我的动态,我们一起学习,一起成长!

用知识改变命运,让家人过上更好的生活,互联网人一家亲!

——公众号《猿码天地》

设计模式

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

必须清楚应用设计模式目的

1、易扩展,易维护

2、少改代码,不改代码

策略模式核心思想

策略模式的核心思想是在一个计算方法中把容易变化的算法抽出来作为“策略”参数传进去,从而使得新增策略不必修改原有逻辑。

即:创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。

实现步骤

1、不同策略实现同一个接口,即定义一个策略接口。 
2、不同策略定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 
3、定义实现策略的策略上下文。

实例讲解

源码获取方式:由于实战源码较多,如需获取源码,请关注公众号"猿码天地",回复“设计模式”即可获取源码。

example1 应用于商场打折场景

假设网站针对普通会员、Prime会员有不同的折扣,同时活动期间还有一个满100减20的活动,这些就可以作为策略实现。

1、先定义打折策略接口:DiscountStrategy接口

2、实现各种策略

普通用户策略:UserDiscountStrategy类

满减策略:OverDiscountStrategy类

Prime会员策略:PrimeDiscountStrategy类

3、新建一个策略上下文:DiscountContext类  
4、新建测试类:Test类

调用方必须首先创建一个DiscountContext,并指定一个策略(或者使用默认策略),即可获得折扣后的价格。

example2 应用于支付宝和京东支付场景

假设第三方支付平台需要对接支付宝、京东支付,怎样使用策略模式进行支付呢?

1、先定义支付策略接口:Payment接口

2、实现支付宝和京东各自的支付策略

阿里支付策略:AliPayment类

京东支付策略:JDPayment类
3、定义支付策略上下文:PayContext类
4、新建测试Test类,创建一个策略上下文对象,调用各自支付策略。

优点和缺点

优点:

1、算法可以自由切换。

2、避免使用多重条件判断。

3、扩展性良好。 
缺点:

1、策略类会增多。

2、所有策略类都需要对外暴露。

使用总结

1、策略模式是为了允许调用方选择一个算法,从而通过不同策略实现不同的计算结果。 
2、通过扩展策略,不必修改主逻辑,即可获得新策略的结果。

扫描二维码关注公众号 : 猿码天地

你多学一样本事,就少说一句求人的话,现在的努力,是为了以后的不求别人,实力是最强的底气。记住,活着不是靠泪水博得同情,而是靠汗水赢得掌声。

——《写给程序员朋友》

支付宝、京东支付场景之策略模式实战相关推荐

  1. springboot map数据类型注入_SpringBoot结合策略模式实战套路

    1. SpringBoot结合策略模式实战套路 1.1. 前言 我们都知道设计模式好,可以让我们的代码更具可读性,扩展性,易于维护,但大部分程序猿一开始都学过至少一遍设计模式吧,实战中不知用到了几成. ...

  2. java策略模式实战示例

    现已放在gitee上,可以不下载直接参考一下即: https://gitee.com/zhang-xiao-xiang/zxx-pattern 日常碰到的业务概述 登录类型,支付类型,供应商渠道,不同 ...

  3. 辨别支付宝各种支付场景

    支付宝支付方式 一.手机网站支付(商家在移动端网页应用中集成支付宝支付功能) 手机网站支付:https://docs.open.alipay.com/203/105288/ 适用于商家在移动端网页应用 ...

  4. java策略模式实战

    项目:保险 场景:保险业务中涉及计费的问题,每种保险的计费策略不同,为了更好的代码维护,参考大神写的java策略模式后为选择了策略模式设计了编码方案. 涉及表: 产品方案表 业务简介: 每个保险产品对 ...

  5. Springboot集成第三方jar快速实现微信、支付宝等支付场景

    文章目录 前言 一.项目地址 二.使用步骤 1.引入jar包 2.根据官方demo,复制相应文件到项目中 常见报错问题 总结 前言 最近有个小型的活动外包项目,要集成一下支付功能,因为项目较小,按照微 ...

  6. [设计模式] ------ 策略模式实战:java中替代if-else的大段逻辑

    java中用策略模式替代if-else的大段逻辑 问题: java本来是一门以面向对象为主的语言,但很多人嘴上说着java面向对象,然后除了表映射实体之外,其他的还是面向过程的思路. 就比如今天要说的 ...

  7. Head First设计模式之策略模式(Strategy)

    小白将从以下几点对策略模式进行解析 策略模式引入的设计技巧 策略模式的定义及类图 策略模式的优缺点 策略模式的应用场景 策略模式实战 总结 零.策略模式引入的技巧 先过一遍,放入脑海中,等看完后面所有 ...

  8. 别在再满屏的 if、else 了,试试策略模式,真香!!

    你还在写满屏的 if/ else/ switch 之类的判断逻辑吗? 栈长在开发人员的代码中看过太多这样的低级代码了,真的太 low,极不好维护,本文栈长就教你如何用策略模式干掉 if/ else/ ...

  9. Java设计模式之——策略模式

    策略模式的简单介绍 在软件开发中常常遇到这样的情况:实现某一个功能可以有多种算法或者策略,我们根据事件情况选择不同的算法或者策略来完成该功能.例如,排序算法,可以使用插入排序.归并排序.冒泡排序等. ...

  10. 移动支付场景覆盖日渐完善市场下沉是必然

    移动支付相关政策频繁出炉 行业发展更趋规范化,支付属于货币流通环节,对国家金融稳定和安全有着重要影响,但目前移动支付行业以市场为主导,第三方支付企业占据行业主导.目前政府出台条码互联.试点数字货币DE ...

最新文章

  1. 核酸和CT同时用, 听谁的?——兼释一天新增一万多
  2. mysql实例管理工具巨杉_实例管理工具_操作_MySQL实例_关系型数据库实例_文档中心_SequoiaDB巨杉数据库...
  3. vue 改变domclass_基于 vue 开发甘特图组件的心路历程(兼设计分享)
  4. 隐藏基于对话框的MFC应用程序窗口的方法
  5. IDC:第一季度全球服务器市场收入下滑4.6% 市场为重大升级做准备
  6. QT Openssl no OPENSSL_Applink 解决
  7. 基于友善之臂ARM-ContexA9-ADC驱动开发
  8. 前端工程师的进阶之路
  9. 何时、何地应用何种窗函数?
  10. 激光雷达的KPI与技术方案
  11. python数据驱动读取用例_Python3-unittest测试框架之DDT数据驱动
  12. ankhsvn 使用_AnkhSVN:在Visual Studio中使用Subversion
  13. user_agent浏览器头部
  14. python爬取某人所有微博_python爬取微博用户关注和粉丝的公开基本信息
  15. 研究生新人如何高效读论文-方法积累笔记
  16. Webmin 远程命令执行漏洞(CVE-2019-15107)
  17. golang json 格式化输出对象
  18. C语言中的四舍六入五成双 和 四舍五入
  19. KMP算法求循环节,为什么能求循环节
  20. linux64x gtx970,NVIDIA英伟达显卡驱动460.67版For Linux x64(2021年3月19日发布)

热门文章

  1. 数据结构PTA期末复习题集
  2. 数据库应用(MySQL客户端工具:Navicat/SQLyog)
  3. drools规则引擎使用文档
  4. 数独问题流程图_算法实践——数独的基本解法
  5. webstorm破解之jar包破解(2018)
  6. 大数据 | 致敬科比的篮球生涯。
  7. 各厂商服务器存储默认管理口登录信息(默认IP、用户名、密码)收集
  8. Datalogic得利捷全新自动调焦产品 开启扩展扫码新体验
  9. angular框架的SmartAdmin模板 如何请求后台数据
  10. java笔试涉及编程题