本网站正在建设图片网站推广公司兴田德润在哪儿

张小明 2026/1/14 11:57:46
本网站正在建设图片,网站推广公司兴田德润在哪儿,装修是全包划算还是半包划算,vue.js网站开发用例在写业务代码时#xff0c;可能出现多层 if / else#xff0c;通常意味着以下问题之一或并存#xff1a; 1.分支条件复杂、可读性差 2.业务规则易变、修改成本高 3.单一方法承担过多职责 卫语句、策略模式、状态模式正是针对不同“分支复杂性来源”而采用的三种典型重构手段…在写业务代码时可能出现多层 if / else通常意味着以下问题之一或并存1.分支条件复杂、可读性差2.业务规则易变、修改成本高3.单一方法承担过多职责卫语句、策略模式、状态模式正是针对不同“分支复杂性来源”而采用的三种典型重构手段。一.卫语句1.适用场景“不满足条件就立即返回 / 抛异常”适合用于参数校验前置条件校验明显的异常路径早退出逻辑典型特征if 之间没有状态变化只是为了过滤非法情况分支不代表不同业务策略2.原始代码publicdecimalCalculatePrice(Orderorder){if(order!null){if(order.Items!nullorder.Items.Count0){if(!order.IsCanceled){returnorder.Items.Sum(xx.Price);}}}return0;}3.卫语句重构publicdecimalCalculatePrice(Orderorder){if(ordernull)return0;if(order.Itemsnull||order.Items.Count0)return0;if(order.IsCanceled)return0;returnorder.Items.Sum(xx.Price);}4.优缺点极低改造成本可读性显著提升非常适合方法开头不能解决真正的业务分支爆炸不适合“不同规则 / 不同行为”的分支二、策略模式Strategy Pattern适用场景“同一件事不同算法 / 不同规则”判断标准if / else 中每个分支都是在“做同一件事”但实现逻辑不同业务规则未来可能扩展典型示例价格计算折扣规则运费计算权限校验规则原始 if / else 示例publicdecimalCalculateDiscount(Orderorder){if(order.CustomerTypeCustomerType.Vip)returnorder.Total*0.8m;elseif(order.CustomerTypeCustomerType.Normal)returnorder.Total*0.9m;elseif(order.CustomerTypeCustomerType.New)returnorder.Total;elsereturnorder.Total;}使用策略模式//① 抽象策略接口publicinterfaceIDiscountStrategy{decimalCalculate(Orderorder);}//② 具体策略实现publicclassVipDiscountStrategy:IDiscountStrategy{publicdecimalCalculate(Orderorder)order.Total*0.8m;}publicclassNormalDiscountStrategy:IDiscountStrategy{publicdecimalCalculate(Orderorder)order.Total*0.9m;}publicclassNewCustomerDiscountStrategy:IDiscountStrategy{publicdecimalCalculate(Orderorder)order.Total;}//③ 策略选择替代 if / elsepublicclassDiscountStrategyFactory{privatestaticreadonlyDictionaryCustomerType,IDiscountStrategy_strategiesnew(){{CustomerType.Vip,newVipDiscountStrategy()},{CustomerType.Normal,newNormalDiscountStrategy()},{CustomerType.New,newNewCustomerDiscountStrategy()}};publicstaticIDiscountStrategyGet(CustomerTypetype)_strategies[type];}//④ 调用varstrategyDiscountStrategyFactory.Get(order.CustomerType);vardiscountstrategy.Calculate(order);优缺点可扩展性极强每个策略逻辑清晰易测试、易维护类数量增加初期显得“设计偏重”需要额外的策略选择机制三、状态模式State Pattern适用场景“对象行为随状态变化而变化”判断标准if / else 依据的是 当前状态,同一方法在不同状态下行为不同,状态之间存在流转关系典型示例订单状态新建 / 已支付 / 已发货 / 已取消,工作流,审批流程,设备状态开机 / 关机 / 待机原始 if / else 示例publicvoidPay(Orderorder){if(order.StatusOrderStatus.Created){order.StatusOrderStatus.Paid;}elseif(order.StatusOrderStatus.Paid){thrownewException(订单已支付);}elseif(order.StatusOrderStatus.Canceled){thrownewException(订单已取消);}}使用状态模式//① 状态接口publicinterfaceIOrderState{voidPay(OrderContextcontext);}//② 状态上下文publicclassOrderContext{publicIOrderStateState{get;set;}publicvoidPay(){State.Pay(this);}}//③ 具体状态publicclassCreatedState:IOrderState{publicvoidPay(OrderContextcontext){context.StatenewPaidState();}}publicclassPaidState:IOrderState{publicvoidPay(OrderContextcontext){thrownewInvalidOperationException(订单已支付);}}publicclassCanceledState:IOrderState{publicvoidPay(OrderContextcontext){thrownewInvalidOperationException(订单已取消);}}优缺点彻底消除状态判断状态逻辑高度内聚对复杂流程极友好类数量显著增加不适合简单状态初学者理解成本高四、三者核心对比总结维度卫语句策略模式状态模式解决什么问题前置校验、异常路径不同算法/规则状态驱动行为是否消除 if❌✅✅是否面向对象否是是类数量不变增加大量增加是否有状态流转无无有扩展性低高高使用成本极低中高完结撒花~
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站案例展示网站建设成本报表

还在为游戏插件管理头疼吗?每次安装新插件都要手动检查兼容性,切换游戏还要重新配置插件组合?Nexus Mods App正是为解决这些痛点而生。本文将带你从安装配置到高级功能,全面掌握这款强大的插件管理工具。 【免费下载链接】NexusMo…

张小明 2026/1/11 9:46:59 网站建设

建筑公司网站设计广州市住宅建设发展有限公司网站

从零打造产线“数字驾驶舱”:一位工程师的上位机实战全记录去年秋天,我接手了一个棘手的任务——为一条老旧装配线搭建实时监控系统。这条产线已经运行了八年,设备杂乱、数据孤岛严重,操作员每天靠纸质表单记录产量和故障时间。管…

张小明 2026/1/11 9:55:03 网站建设

网站开发销售简历范文网页设计学费

OBS-VST终极指南:如何为直播音频添加专业级VST效果插件 【免费下载链接】obs-vst Use VST plugins in OBS 项目地址: https://gitcode.com/gh_mirrors/ob/obs-vst 想要让你的直播间声音听起来像专业录音棚吗?OBS-VST插件正是你需要的解决方案。这…

张小明 2026/1/11 11:38:06 网站建设

海外网络推广收费网站建设网站推广优化

Seeing Theory:开启贝叶斯推断可视化学习之旅 🎯 【免费下载链接】Seeing-Theory A visual introduction to probability and statistics. 项目地址: https://gitcode.com/gh_mirrors/se/Seeing-Theory 统计学学习从未如此生动有趣!Se…

张小明 2026/1/11 11:48:31 网站建设

海南百度网站建设竞价托管一般多少

Sabaki围棋软件完整安装指南:从零开始轻松上手 【免费下载链接】Sabaki An elegant Go board and SGF editor for a more civilized age. 项目地址: https://gitcode.com/gh_mirrors/sa/Sabaki Sabaki是一款优雅的围棋对弈软件和SGF编辑器,专为追…

张小明 2026/1/11 11:44:33 网站建设

信息网站建设汇报申请免费网站需要什么条件

Jupyter Notebook转Python脚本:使用nbconvert命令 在数据科学和机器学习项目中,我们常常会遇到这样的场景:一个算法原型在 Jupyter Notebook 中调试成功,团队决定将其纳入生产流程。然而,当你试图直接运行 .ipynb 文件…

张小明 2026/1/11 10:19:18 网站建设