如何运用策略模式与工厂模式优化复杂的条件判断逻辑?

策略模式封装不同行为算法,工厂模式根据类型创建对应策略实例,二者结合将条件判断收拢至工厂,主流程仅执行策略,提升可扩展性与可维护性。

如何运用策略模式与工厂模式优化复杂的条件判断逻辑?

当代码中出现大量 if-else 或 switch-case 判断,尤其是根据类型、状态或行为分支执行不同逻辑时,维护和扩展都会变得困难。策略模式与工厂模式结合使用,能有效解耦条件判断与具体行为,提升代码的可读性与可扩展性。

策略模式:封装变化的行为

策略模式将每一种算法或行为封装成独立的类,使它们可以互相替换。通过统一接口调用不同实现,避免在主流程中写死逻辑。

例如,一个订单折扣计算功能,根据用户类型(普通、VIP、SVIP)采用不同计算方式:

定义策略接口:DiscountStrategy,包含 calculate(amount) 实现具体策略类:NormalDiscount、VIPDiscount、SVIPDiscount 上下文类 OrderProcessor 接收策略实例并执行计算

这样,新增折扣类型无需修改原有判断逻辑,只需添加新策略类并接入即可。

工厂模式:解耦对象创建

虽然策略模式分离了行为,但选择哪个策略仍可能依赖条件判断。工厂模式负责根据输入(如用户类型)创建对应的策略实例,把“选哪个”从主流程中剥离。

创建 DiscountStrategyFactory 工厂内部包含映射关系,如 { “normal”: NormalDiscount, “vip”: VIPDiscount } 对外提供 getStrategy(userType) 方法,返回对应策略实例

调用方只需传入类型,拿到策略对象,无需知道创建细节,也不接触 if-else 分支。

组合使用:清晰分工,易于维护

实际调用流程如下:

接收用户类型 userType 调用 factory.getStrategy(userType) 获取策略对象 orderProcessor.setStrategy(strategy) processor.calculate(totalAmount)

if-else 判断被收拢到工厂内部,甚至可以用配置或映射表替代,后期扩展只需注册新策略,不改动核心逻辑。

优势与适用场景

这种组合特别适合:

多分支业务规则,如支付方式、审批流程、消息通知渠道 行为随类型或状态变化,且未来可能增加新类型 需要单元测试不同策略,隔离验证

基本上就这些。关键是把“做什么”(策略)和“怎么选”(工厂)分开,主流程只关心“执行”,结构更清晰,也更容易应对变化。

以上就是如何运用策略模式与工厂模式优化复杂的条件判断逻辑?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1522545.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
JavaScript 的数组方法 map、filter 和 reduce 在函数式编程中有何重要意义?
上一篇 2025年12月20日 15:07:44
使用 Axios 处理 Server-Sent Events (SSE) 数据流
下一篇 2025年12月20日 15:07:57

相关推荐

  • 《赛博朋克2077》Switch 2版 官方操作小贴士来了

    《赛博朋克2077》Switch 2版 官方操作小贴士来了《赛博朋克2077》Switch 2版 官方操作小贴士来了《赛博朋克2077》Switch 2版 官方操作小贴士来了《赛博朋克2077》Switch 2版 官方操作小贴士来了

    《赛博朋克2077》成为switch 2首发阵容中销量最高的第三方作品。近日,《赛博朋克2077》官方推特发布了关于switch 2版本的一些操作技巧: 如果你更倾向于使用鼠标进行游戏,可以尝试拆下Joy-Con(右)手柄,将其当作鼠标来使用。 在陀螺仪模式下微调你的瞄准!通过倾斜Joy-Con(右…

    2026年8月30日 用户投稿
    000
  • windows怎么设置默认音频设备_windows默认音频播放与录音设备设置方法

    首先通过系统声音设置更改默认播放设备,右键音量图标选择声音设置,在输出选项中选定目标设备并测试;接着在声音控制面板的录制选项卡中设置默认麦克风,右键所需设备设为默认值;还可使用AudioSwitch等第三方工具快速切换输入输出设备;高级用户可通过nircmd命令行工具实现自动化切换,用setdefa…

    2026年8月30日
    000
  • 《咚奇刚:蕉力全开》支持双人合作 玩家可控制小宝琳

    在本月18日的直面会上,任天堂发布了《咚奇刚:蕉力全开》的最新情报,确认《超级马里奥:奥德赛》中的年轻版宝琳将作为搭档角色加入本作。 在游戏中,小宝琳能够通过歌声使大金刚短暂变形成多种形态,例如可以高速冲刺的斑马,或是能投掷蛋形炸弹的飞行鸵鸟。此外,第二名玩家也可以操控小宝琳,从而开启双人合作模式。…

    2026年8月30日
    300
  • 原野可换人!《蕾斯莱莉姬娜的炼金工房》实机演示!

    原野可换人!《蕾斯莱莉姬娜的炼金工房》实机演示!原野可换人!《蕾斯莱莉姬娜的炼金工房》实机演示!原野可换人!《蕾斯莱莉姬娜的炼金工房》实机演示!原野可换人!《蕾斯莱莉姬娜的炼金工房》实机演示!

    近日,光荣特库摩正式公开了《炼金工房》系列最新作品《红色的炼金术士和白色的守护者~蕾斯莱莉娅娜的炼金工房~》的首支“原野”实机演示画面。本次作品首次加入了原野无缝切换角色功能,让我们一起来看看吧! 实机演示: 本作的故事舞台设定在“兰塔纳大陆”,玩家可以灵活使用各种采集工具,在与魔物的战斗中收集珍贵…

    2026年8月29日 用户投稿
    000
  • 《暗黑破坏神不朽》重大更新「自由王子」即将登场

    暴雪娱乐正式宣布,《暗黑破坏神 不朽》将在 6 月 20 日(星期五)迎来重要版本更新「自由王子」,本次更新将推出全新的主线任务、团队决斗玩法以及限时开启的套装猎人活动等丰富内容。从更新上线日起至 7 月 3 日(星期四),玩家还可于 battle.net 平台免费领取一颗五星霜血传奇宝石。 为庆祝…

    2026年8月29日
    700
  • switch520热门游戏资源入口-switch520免费资源链接地址

    Switch热门游戏资源与免费链接的获取,核心在于官方平台与玩家社区结合。首先,任天堂eShop提供《堡垒之夜》《Apex英雄》等免费游戏及试玩版,是合法资源首选;其次,通过DekuDeals等价格追踪网站和IGN等媒体掌握最新折扣与资讯;最后,积极参与Reddit、贴吧等玩家社区,可获取限时活动、…

    2026年8月29日
    000
  • 《赛博朋克2077》2.3版本更新延期 原计划6月26日上线

    今晚cdpr官方微博透露,《赛博朋克2077》2.3版本更新将推迟发布,原定上线时间为6月26日,新版本的具体发布时间尚未公布。官方表示,2.3版本的内容规模与2.2版本相当,并承诺将尽快公开更多更新细节。 本月初,《赛博朋克2077》2.3版本正式对外公布,该版本将新增多个支线任务,并同步登陆PS…

    2026年8月29日
    100
  • 《优米雅的炼金工房》联动DLC上线 全新预告片与抽奖活动!

    《优米雅的炼金工房》联动DLC上线 全新预告片与抽奖活动!《优米雅的炼金工房》联动DLC上线 全新预告片与抽奖活动!《优米雅的炼金工房》联动DLC上线 全新预告片与抽奖活动!《优米雅的炼金工房》联动DLC上线 全新预告片与抽奖活动!

    近日,游戏开发商光荣特库摩正式宣布,《优米雅的炼金工房》将与《美德传奇f高清复刻版》展开联动合作,本次联动活动已正式上线。联动期间将推出免费的服装dlc内容,并同步开启抽奖活动,截止时间为2025年7月6日(星期日)。与此同时,全新的宣传视频也已发布,一起来了解一下详情吧! 宣传视频: 《优米雅的炼…

    2026年8月29日 用户投稿
    100
  • 在电商系统中,Workerman 实现实时库存同步的技术方案

    workerman 可以实现电商系统的实时库存同步。1) workerman 作为中间件,通过 websocket 实现实时通信和高并发处理。2) 它接收、处理并推送库存变动信息,确保数据一致性。3) 使用负载均衡、数据压缩和缓存机制可以优化系统性能。 引言 在电商系统中,库存管理是一个关键环节,直…

    2026年8月28日
    000
  • Newzoo2025年5月游戏销量榜发布 《33号远征队》进入前10

    Newzoo2025年5月游戏销量榜发布 《33号远征队》进入前10Newzoo2025年5月游戏销量榜发布 《33号远征队》进入前10Newzoo2025年5月游戏销量榜发布 《33号远征队》进入前10Newzoo2025年5月游戏销量榜发布 《33号远征队》进入前10

    根据市场研究机构newzoo发布的数据,《光与影:33号远征队》在五月份成功跻身整体游戏收入榜(涵盖美国、英国、德国、法国、西班牙和意大利的pc和主机平台)前十名。该作在四月份首发时曾位列第13位。 Newzoo指出,这种在发售之后收入排名继续上升的情况“对于一款付费作品来说非常少见”,并强调这体现…

    2026年8月28日 用户投稿
    100
  • 使用Flag变量实现Java菜单循环与返回

    本文将介绍如何在Java程序中使用flag变量控制菜单的循环和返回。通过设置和判断flag变量的值,可以实现从子菜单返回主菜单的功能,避免不必要的菜单重复显示,提升用户体验。本文将提供代码示例,详细解释flag变量的工作原理,并给出使用注意事项。 在Java程序中,经常需要构建交互式的菜单界面,让用…

    2026年8月28日
    100
  • Yii 框架如何支持 WebSocket 实时通信?

    yii 框架本身不直接支持 websocket,但可以通过扩展实现。1. 安装扩展库(如 yii2-websocket 或 ratchet)。2. 配置 websocket 服务器。3. 实现 websocket 逻辑。通过这些步骤,可以在 yii 中实现实时通信功能。 引言 WebSocket 作…

    2026年8月28日
    100
  • 基于Impala的高性能数仓实践之执行引擎模块

    基于Impala的高性能数仓实践之执行引擎模块基于Impala的高性能数仓实践之执行引擎模块基于Impala的高性能数仓实践之执行引擎模块基于Impala的高性能数仓实践之执行引擎模块

    导读: 本系列文章将结合实际开发和使用经验,聊聊可以从哪些方面对数仓查询引擎进行优化。 Impala是Cloudera开发和开源的数仓查询引擎,以性能优秀著称。除了Apache Impala开源项目,业界知名的Apache Doris和StarRocks、SelectDB项目也跟Impala有千丝万…

    2026年8月28日 用户投稿
    100
  • 小心二手Swtich2 买回来可能变砖

    除了硬件质量问题之外,想要入手二手任天堂switch 2的玩家们还需留意因网络服务封锁而导致主机无法正常使用的情况。尽管这些限制措施是任天堂为了打击盗版和防止主机被破解所采取的手段,但也引发了关于switch 2长期使用性的担忧。 近日一位Reddit用户分享了自己的经历,他在沃尔玛以低于市场价50…

    2026年8月28日
    000
  • 《狂野之心S》武器“槌”介绍 攻击多样高破坏力!

    《狂野之心S》武器“槌”介绍 攻击多样高破坏力!《狂野之心S》武器“槌”介绍 攻击多样高破坏力!《狂野之心S》武器“槌”介绍 攻击多样高破坏力!《狂野之心S》武器“槌”介绍 攻击多样高破坏力!

    近日,光荣特库摩公开了和风狩猎动作游戏《狂野之心s》中武器“槌”的介绍视频。该游戏最多支持4人联机游玩,并计划于7月25日登陆switch2平台。 视频欣赏: 槌是一种具备高破坏力与多样攻击方式的重型近战武器,其握柄可伸缩,从而实现多种攻击手段。由于该武器在操作上较为笨重,因此需要巧妙运用环境机关来…

    2026年8月28日 用户投稿
    100
  • 塞尔达传说王国之泪神兽兵装梅德升级材料汇总

    塞尔达传说王国之泪神兽兵装梅德升级材料汇总塞尔达传说王国之泪神兽兵装梅德升级材料汇总塞尔达传说王国之泪神兽兵装梅德升级材料汇总塞尔达传说王国之泪神兽兵装梅德升级材料汇总

    塞尔达传说王国之泪神兽兵装鲁梅德升级需要哪些材料?可能很多玩家还不太清楚。下面小编给大家带来塞尔达传说王国之泪神兽兵装梅德升级材料汇总,感兴趣的小伙伴一起了解一下吧。 塞尔达传说王国之泪神兽兵装梅德升级材料汇总 神兽兵装·梅德升级材料 防具属性:耐寒防护 套装奖励:无 防 御 力:2(初始)→4(一…

    2026年8月27日 用户投稿
    100
  • switch游戏白嫖大全-switch520网盘资源链接更新

    Switch520提供《塞尔达传说》《马里奥赛车》等游戏免费下载,支持中文搜索、直链获取及MOD、DLC资源,操作便捷且无需注册,但资源为破解版,存在版权违法风险,长期使用损害开发者利益与游戏生态。 想找Switch游戏免费下载资源,switch520这类网站确实是很多人搜的对象。它主打免费、不用注…

    2026年8月27日
    000
  • 《哈迪斯2》M站玩家评分7.7分:超好玩 进步巨大!

    《哈迪斯2》M站玩家评分7.7分:超好玩 进步巨大!《哈迪斯2》M站玩家评分7.7分:超好玩 进步巨大!《哈迪斯2》M站玩家评分7.7分:超好玩 进步巨大!《哈迪斯2》M站玩家评分7.7分:超好玩 进步巨大!

    备受期待的动作肉鸽续作《哈迪斯2》现已正式发售,开发商Supergiant Games再次带来惊艳之作。IGN为本作献上了罕见的10分满分评价,盛赞其卓越的设计与深度。游戏延续了希腊神话背景,深入挖掘冥界传说与神秘巫术,玩家将化身冥界公主,在奥林匹斯诸神的协助下,直面强大的时之泰坦,展开一场波澜壮阔…

    2026年8月27日 用户投稿
    000
  • 使用 Java 配合 Locale 动态 Switch 语句

    本文介绍了在 Java 中如何使用 `switch` 语句配合 `Locale` 实现动态的语言环境切换。由于 `switch` 语句的 `case` 标签必须是常量表达式,直接使用从 `ResourceBundle` 获取的值是不允许的。本文提供了两种解决方案:使用 `if-else if` 结构…

    2026年8月27日
    100
  • 软萌夺旗对战游戏《果冻部队》(Jelly Troops)将于2025年9月18日上线!

    软萌夺旗对战游戏《果冻部队》(Jelly Troops)将于2025年9月18日上线!软萌夺旗对战游戏《果冻部队》(Jelly Troops)将于2025年9月18日上线!软萌夺旗对战游戏《果冻部队》(Jelly Troops)将于2025年9月18日上线!软萌夺旗对战游戏《果冻部队》(Jelly Troops)将于2025年9月18日上线!

    株式会社phoenixx(总部位于东京都武藏野市,代表取缔役社长:坂本和则)宣布,旗下可爱风格夺旗对战游戏《果冻部队》(jelly troops)将于2025年9月18日(周四)在steam与nintendo switch™平台同步推出。 此外,官方也正式公布本作将参与于2025年7月18日(周五)…

    2026年8月27日 用户投稿
    100

发表回复

登录后才能评论
关注微信