当前位置: 首页 > wzjs >正文

手机网站建设的方法做调查问卷换赏金的网站

手机网站建设的方法,做调查问卷换赏金的网站,搜狗网站优化软件,家装设计网站开发若感行文枯燥,请移步至文末Gitee地址中查看源码自行测试感受策略模式之魅力。 一、策略模式的核心概念 策略模式的定义 定义算法族,封装每个算法,使其可互换。 核心三要素 Context:上下文,负责接收客户端请求并委托…

在这里插入图片描述

若感行文枯燥,请移步至文末Gitee地址中查看源码自行测试感受策略模式之魅力。

一、策略模式的核心概念

策略模式的定义

定义算法族,封装每个算法,使其可互换。

核心三要素

  • Context:上下文,负责接收客户端请求并委托具体策略对象处理,实现业务逻辑与算法实现的解耦。
  • Strategy:定义接口和规范
  • ConcreteStrategy:具体的实现策略

如果把策略模式想象成一个万能遥控器,遥控器通过不同的控制卡控制不同的设备实现不同的功能;遥控器承担Context角色,作为控制中枢提供统一操作入口;控制卡接口插槽则是对应Strategy,定义标准功能;空调、灯光、音箱控制卡则是具体的实现策略(ConcreteStrategy),各自实现温度调节、亮度调控、音量控制等具体功能。

本质

Java中推荐面向接口编程,而非面向实现,策略模式作为这一原则的典型应用,通过抽象策略接口与具体实现解耦,有新的扩展需求时,只需要增加其实现即可,而无需对源代码进行改动,也符合对新增开放,对修改关闭的原则(开闭原则)。基于这种设计思想,在新增设备类型时(如加湿器控制卡),只需扩展新的策略实现而无需修改遥控器本体,即无需修改原代码,只在原代码的基础上新增。

模式结构解析

将策略模式的结构应用于真实且常见的业务场景如支付场景,如在门诊收费页面,用户可以选择支付宝、微信、银联支付,不同的支付方式交互的方式不同,则需要不同的支付实现策略,那么结构参考下图:

在这里插入图片描述

二、解决了什么问题&应用场景

应用场景

在支付实际业务场景中,我们需要使用支持不同的支付方式如:支付宝、微信、银联,每种支付方式调用的接口API、请求参数、返回结果各不相同,有时系统有接入新的支付方式的需求,同时支付相关的业务逻辑比较复杂,每种支付方式的实现代码都会比较长,尤其是聚合了多种支付方式的系统,在维护和开发时成本都更高。

解决了什么问题

策略模式解决了以下痛点:

  1. 代码耦合高:不同支付方式实现混杂在业务逻辑中,存在大量if-else/switch分支
  2. 扩展成本高:新增支付方式需要修改原有支付逻辑,违反开闭原则
  3. 可维护性差:单个方法可能膨胀至上千行,参数传递混乱(如不同支付方式参数通过Map传递)
  4. 测试便利性: 新增策略时可以直接测试新逻辑,不影响原逻辑

代码示例

使用伪代码展示当业务逻辑复杂时,if、switch、策略模式各自的实现方案。

if-else
@Slf4j
@Service
public class IfPaymentServiceImpl implements IfPaymentService {@Overridepublic String pay(String type, BigDecimal amount) {if (Constant.PAYConstant.ALI_PAY.equals(type)) {return "支付宝支付成功,金额:" + amount;} else if (Constant.PAYConstant.WECHAT_PAY.equals(type)) {return "微信支付成功,金额:" + amount;} else if (Constant.PAYConstant.UNION_PAY.equals(type)) {return "银联支付成功,金额:" + amount;}throw new IllegalArgumentException("无效支付方式");}
}
switch-case
public class SwitchPaymentServiceImpl implements SwitchPaymentService {@Overridepublic String pay(String type, BigDecimal amount) {switch (type) {case Constant.PAYConstant.ALI_PAY:return "支付宝支付成功,金额:" + amount;case Constant.PAYConstant.WECHAT_PAY:return "微信支付成功,金额:" + amount;case Constant.PAYConstant.UNION_PAY:return "银联支付成功,金额:" + amount;default:throw new IllegalArgumentException("无效支付方式");}}
}
策略模式

支付方式的策略工厂,类比于使遥控器找到对应的功能的控制卡。

/*** 支付方式的策略工厂*/
@Slf4j
@Component
public class PaymentStrategyFactory {/*** 策略池*/private final Map<String, PaymentService> STRATEGY_MAP = new ConcurrentHashMap<>();@Resourceprivate List<PaymentService> strategies;/*** Spring启动时注入所有的支付策略*/@PostConstructpublic void initStrategies() {for (PaymentService strategy : strategies) {log.info("注入策略:{}", strategy.getClass().getSimpleName());String type = strategy.getClass().getSimpleName().replace("Strategy", "");STRATEGY_MAP.put(type, strategy);}}/*** 根据上下文获取支付策略* @param type 上下文参数* @return 支付策略*/public PaymentService getStrategy(String type) {PaymentService paymentService = STRATEGY_MAP.get(type);return Optional.ofNullable(paymentService).orElseThrow(() -> new IllegalArgumentException("无效支付类型"));}}

类比于遥控器中插槽,定义标准功能。

public interface PaymentService {/*** 支付接口*/String pay(String type, BigDecimal amount);
}

具体实现策略,指定遥控器可以控制设备的具体功能的视线方式。

@Slf4j
@Component
public class AlipayStrategy implements PaymentService {@Overridepublic String pay(String type, BigDecimal amount) {try {Thread.sleep(2000);} catch (Exception e) {log.info("异常", e);}return "支付宝支付成功,金额:" + amount;}
}

代码地址

源码

http://www.dtcms.com/wzjs/547139.html

相关文章:

  • wordpress拿站网站建设怎么建好
  • 网站优化基础设计公司网站需要多少钱
  • 网站建设与管理 需求分析义乌营销型网站建设
  • 做漫画的网站有哪些公司的门户网站模版
  • 建设官方网站需要注意什么搜索引擎优化排名技巧
  • 电子商务网站建设需要什么网站价值评估怎么做
  • 整站seo定制wordpress页面发布不
  • 怎样解析网站域名有哪些好的做兼职的网站
  • 上海贸易网站建设茗匠智能门店管理系统
  • 网站开发分类wordpress 全部函数
  • 动漫做h免费网站发布设计任务的网站
  • 网站备案怎样提交管局ps网页排版设计
  • 国外的自建网站怎么做化妆品网站建设原因
  • 宝塔服务器搭建网站教程贵州省住房和城乡建设厅网站报名网
  • 南阳网站推广优化公司哪家好电脑个人网站怎么做
  • 济南php网站开发成都网站建设推广港哥熊掌号
  • 免费建设网站赚钱百度指数指的是什么
  • 南昌市建设工程质量监督网站顺义做网站的厂家
  • 北京互联网公司开发的网站讨债公司 做网站
  • 网站建设费用主要包括那几项天津市住房与城乡建设厅网站
  • 如何做简单网站国外优秀画册设计网站
  • 最优秀的无锡网站建设企业家网站建设
  • 学网站开发去哪学移动微网站
  • dedecms导入网站模板下载短信营销哪个平台好
  • 自己怎么做网站赚钱做婚礼邀请函网站
  • asp个人网站怎么建设手机网站 微信链接
  • 网站需要去工信部做备案吗wordpress站点全屏
  • 佛山网站建设解决方案营销型网站建设风格设定
  • 山东网站建设公司哪家权威app设计论文
  • 一家专门做原型的网站山海关网站制作