首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

多态重构条件语句

首先,在C#中,多态的体现是什么?虚函数、抽象方法、接口。废话不多说,直接上代码: #region 多态重构switch...case.......{ return shippingCalculation.Calculate(); } } #endregion 我们抽象出来基类,将其改造抽象类和抽象方法...,使其在子类中重写各自的逻辑,而后具体的选择(也就是条件语句)交给客户端来处理。...ctx.ProcessCalculate(new FloridaShippingCalculation()); Console.WriteLine($"{price}"); } 就这么简单,细心的我们可以发现,这种多态的写法好像策略模式...设计模式中绝大数的模式都是多态的应用罢了。 参考链接 31天重构学习笔记31. 使用多态代替条件判断 31天重构学习笔记11. 使用策略类 策略模式重构switch/case分支代码

9310

单体应用重构微服务

微服务重构概述 单体应用程序转换为微服务的过程是应用程序现代化的一种形式。这是几十年来开发人员一直在做的事情。因此,在应用程序重构微服务时,有一些方法可以重用。 一个策略是不推荐“大面积”重写。...这意味着当您实现新功能时,您不应该向整体添加更多的代码。 相反,这一策略的主要思想是代码放在独立的微服务器中。 下图显示了应用此方法后的系统架构。 ? 除了新服务和传统的整体,还有另外两个组件。...您将经常需要进行重大的代码更改来破坏这些依赖关系。下图显示了重构。 一旦实现了粗粒度的界面,您就可以模块变成一个独立的服务。...第二个重构步骤模块转换为独立服务。入站和出站接口由使用IPC机制的代码实现。...相反,您应该应用程序逐步重构一组微服务器。 可以使用三种策略:实现新功能作为微服务; 从业务和数据访问组件拆分展现层组件; 并将单体应用中的现有模块转换为服务。

94080
您找到你想要的搜索结果了吗?
是的
没有找到

代码重构之道:消灭冗长的if语句,提升代码质量

当我们重构代码时,去除代码中的 if语句通常是一个很好的目标。 if语句可能会使代码变得复杂,难以维护,容易引入 bug。本文介绍一些去除 if语句的常见方案和代码示例。 1....使用多态 多态是一种面向对象编程的技术,它允许我们根据对象的具体类型来调用方法。通过使用多态,我们可以去除一些条件判断语句。...示例: // 使用多态来去除if语句 interface Shape { double calculateArea(); } class Circle implements Shape...,还有设计模式中的工厂模式、观察者模式、装饰者模式等,都可以帮助我们去除代码中的if语句,提高代码的可维护性和可扩展性。...具体的方法取决于代码的具体情况和需求。 重构代码以去除 if语句可能需要一些额外的工作,但通常是值得的,因为它可以使代码更加清晰、可读和易于维护。希望这些示例对你有所帮助。感谢你的阅读!

14240

代码重构新手教程:如何代码变成好代码

如何代码变成好代码,本文将由浅入深、一步步带你理解重构的奥秘,让你对重构有个基本的了解。...对于逻辑混乱的代码,如在循环中随意使用 break,复杂的 if 语句嵌套等,你要做的是理清逻辑,重构代码,而不是让注释替你补锅。...负值条件的重构 在条件或循环语句中,使用负值条件,会让代码难以理解、容易出错,比如判断是否男性,条件写成了 "!...isNotFemale(gender)" 重构方法是条件改成正值,并调换 if/else 语句代码块的顺序。...作者的建议是只做必要的重构,如当需要修正 bug 或者增加新的功能,这种情况下,先为遗留代码编写测试用例,在理解的基础上重构代码代码修改做好准备,然后进行代码修改。

52720

开发中滥用面向对象,你是否违背了编程原则

如果要为它添加一个新的 case 子句,就必须找到所有 switch语句并修改它们。面向对象中的多态概念可为此带来优雅的解决办法。 大多数时候,一看到 switch 语句,就应该考虑以多态来替换它。...switch 语句常常根据类型码进行选择,你要的是“与该类型码相关的函数或类”,所以应该运用 提炼函数(Extract Method) switch 语句提炼到一个独立函数中,再以 搬移函数(Move...收益 提升代码组织性。 ? 何时忽略 如果一个 switch 操作只是执行简单的行为,就没有重构的必要了。...这种代码不好理解。你期望查看对象字段的数据,但是出于某种原因,它们总是空。 解决方法 可以通过 提炼类(Extract Class) 临时字段和操作它们的所有代码提炼到一个单独的类中。...当最终选择并运用某种方法来重构后,也许你就能删除其中一个类了。 收益 消除了不必要的重复代码代码瘦身了。 代码更易读(不再需要猜测为什么要有两个功能相同的类)。 ?

77640

【封装那些事】 未利用封装

未利用封装 客户代码使用显式类型检查(使用一系列if-else或switch语句检查对象的类型),而不利用出层次结构内已封装的类型变化时,导致这种坏味。 为什么要利用封装?...相反,如果利用了运行时多态,完全可以避免这种问题。 未利用封装潜在的原因 以过程型思维使用面向对象语言 开发时的思维是以代码执行过程导向,自然而然就会使用if-else语句switch语句。...transferType定义如下: protected int transferType; 重构建议:决定行为的条件语句删除,并在层次结构中引入多态方法。...可能需要在客户代码或一个工厂类中使用switch-case语句,而只需要使用一次这个switch-case语句。...这让我想起,我在看完《重构》后天真幼稚的想消除项目中的switch-case语句,只要项目中存在switch-case语句我就觉得存在坏味道,此后的一段时间我很痛苦,因为项目中总是存在消灭不了的switch-case

1.2K40

【封装那些事】 未利用封装

未利用封装 客户代码使用显式类型检查(使用一系列if-else或switch语句检查对象的类型),而不利用出层次结构内已封装的类型变化时,导致这种坏味。 为什么要利用封装?...未利用封装潜在的原因 ###以过程型思维使用面向对象语言 开发时的思维是以代码执行过程导向,自然而然就会使用if-else语句switch语句。...transferType定义如下: protected int transferType; 重构建议:决定行为的条件语句删除,并在层次结构中引入多态方法。...可能需要在客户代码或一个工厂类中使用switch-case语句,而只需要使用一次这个switch-case语句。...这让我想起,我在看完《重构》后天真幼稚的想消除项目中的switch-case语句,只要项目中存在switch-case语句我就觉得存在坏味道,此后的一段时间我很痛苦,因为项目中总是存在消灭不了的switch-case

1K90

Java中我如何去除if...else...语句

读《重构 改善既有代码的设计》有一条就是,以多态取代条件表达式。这是才是最本质的解决方式。 这里的去除if…else…语句,不是遇见了if…else…语句就去除。...而不是平时编写代码遇见一些普通的条件表达式就去把它去除,不是这样的。 而且,一般来说编程语言都有switch语句去替代if…esle…语句。...以多态取代条件表达式 代码的坏味道一: double getSpeed() { switch_ (_type) { case EUROPEAN: return getBaseSpeed...或者可以理解谁持有了谁的引用。 c, 其次就是一个继承关系。...小结 由于偶然读到别人技术博客关于if…else…的取代文章,发现这也是一个思路,但是不够那么好,于是记录下《重构 改善既有代码设计》的一个以多态取代条件表达式的范例。

1.8K10

业务代码如何才能不再写出大串的ifelse?

重构后的 issueArticle 函数: 如今这就只剩一层缩进,代码复杂度大大降低,可读性和可维护性也大大增强。 禁用else 大多数人印象中,if 和 else 几乎比翼齐飞。...根据文章信息进行收费: 不用 else,简单方式就是让每个逻辑提前返回,类似卫语句: 业务简单的代码,这重构还很轻松,但对复杂代码,就得上多态了。...嵌套、else 语句,都是坏味道,本质上都在追求简单,因为一段代码的分支过多,其复杂度就会大幅度增加。...这并非仅有的根据用户级别进行判断的代码,各种需区分用户级别场景都有类似代码,而这也是一种典型的坏味道:重复switch(Repeated Switch),通常都是因为缺少一个模型。...引入 UserLevel 模型,消除 switch: 前面代码即可去掉 switchswitch 其实就是一堆“ if…else” 的简化写法,二者等价,所以,这个重构手法,以多态取代的是条件表达式

76010

代码重构实战-值对象改为引用对象(Change Value to Reference)

这时,考虑多份数据副本变成单一的引用,这样对顾客数据的修改就会立即反映在该顾客的所有订单中。 把值对象改为引用对象会带来一个结果:对于一个客观实体,只有一个代表它的对象。...做法 相关对象创建一个仓库(若还没这样的一个仓库)。 确保构造器有办法找到关联对象的正确实例。修改宿主对象的构造器,令其从仓库中获取关联对象。每次修改后测试。...setCustomerName(String customerName) { customer = new Customer(customerName); } } 此外,还有一些代码也会使用...在应用程序的启动代码中,先把需要使用的Customer对象加载妥当。这些对象可能来自数据库,也可能来自文件。简单起见,我在代码中明确生成这些对象。

78630

重构》第三章 - 读后感(数据泥团,数据类型,switch问题)

重构》这本书我们已经读了将近100页了。在第三章主要讲解的就是问题代码潜在的存在点。除了前边的三篇文档的第一篇文档比较明显外,其他的问题代码就需要我们具有明锐的观察力和边界概念。...对于这块问题,书中将以我们使用数据替换为对象, Switch惊悚现身 对于switch语句来说,代码是经常使用的。那么这块居然也是有问题的?...在书中我们看到switch的问题在于重复,书中写道switch语句散部与在不同的地点,如果要添加一个case语句,就必须找到所有的switch语句并修改他们。...但是问题是如果我们在switch语句里做一些复杂的逻辑,而且这些逻辑还与具体的类关系紧密,那么这种情况就需要我们剥离switch了,这块的剥离的方法就是使用多态。...这种问题代码需要可以采用多态进行处理,如果处理不了,那么作者觉的保留switch的同时保留类,然后让具体领域的类去做属于自己管辖领域的事情其实也是可以的。

34110

重构》第九章 - 读后感(简化条件表达式)

,那肯定也是在《代码简洁之道》那里写的,《重构》更加注重的是合纵联壁的战略思维,让我们看到的是各种类的统筹兼顾。...也确实,如果我们的判断语句很长,那么里边肯定包含了很多逻辑,而且这个逻辑可能包含很多步骤的判断,也就是说这个if判断其实是很多的步骤,那么代码的可读性会很差,但是如果我们将其提炼函数,那么就有了再次提炼的可能...这里的两个例子其实也比较无聊,因为相信大家写的代码都没有重构的必要。 5.使用卫语句取代嵌套条件表达式 函数中的条件逻辑使人难以看清正常的执行路径,那么就用卫语句表现所有的特殊情况。...6.使用多态取代条件表达式 如果手里有个条件表达式,它根据对象类型的不同而选择不同的行为,那这个条件表达式的每个分支都可以放进一个子类内的覆写函数中,人后原始函数申明为抽象函数。...在前边的文章中我们多次说到了多态,其实在重构这本书中是提倡使用多态的,多态就是为了解决不同情况的操作的,因此其天然具有判断的标志。也就是使用了多态你根本都不需要写判断或者switch语句

24210

代码重构(四):条件表达式重构规则

基于对上述代码的结构的假设,接下来我们将要对其进行重构。说白了,就是让条件表达式中的比较复杂的模块进行拆分与提取。...对于这个示例而言,我们不难看出,去代码的重复化。print语句移到条件之外。但是要学会举一反三呢,重要的是重构手法和思想。...下方是重构后的代码。如果你对下方代码看着不爽的话,完全可以根据之前我们介绍的重构手法“使用查询来替代临时变量”,下方的代码继续重构,在本章博客中就不做过多介绍了。 ?...下方代码不难理解,当i20时,我们就翻转标记变量的状态,然后if中的语句块就不被执行了。 虽然下方代码片段是我写的,但是我个人看着超级的不舒服。...当然在Switch中的分支的计算方法在本例中非常简单,但是我们要假设每个分支的计算非常复杂,而且有着多行代码。 在这种假设的情况下,下方的条件语句是非常糟糕的,因为庞大的业务逻辑增加了代码维护的成本。

1.5K90

重构方法与实践笔记

“重写”与“重构”之后,下面专注地讲一下重构 1.1 重构的概念和背景 EPC 破窗理论与懒惰:在没有刻意优化下,代码腐烂是必然的 80%在别人的代码上进行修改 1.2 重构的目的:使软件结构更加合理...(Long Parameter List):最好不超过5个《代码整洁之道推荐不超过3个》 - 基本类型偏执(Primitive Obsession) - 重复的Switch(Repeat Switch)...- 分解表达式 - 以多态处理堆叠的条件表达式(如switch) - 状态模式 - 策略模式 - 条件表达式转换为查找表,使用注解完成映射 2.4 进阶优化 组合函数(Composed Method...嵌套逻辑扁平化 - 管道替代循环,声明式替代命令式 3. 类重构 Program to an interface, not an implementation....粘滞性 个人因素 - 代码阅读能力 - 重构方法的掌握 环境因素 - 时间,如需求倒排 3.2 面向对象 3.2.1 三大特性 - 抽象 - 继承 - 多态 3.2.2 设计原则 使用接口进行解偶

87200

写出优质Java代码的4个技巧

在条件设计中,我们必须复制现有的switch语句并将其添加到我们的新方法中。此外,我们还必须在每个case语句中添加每个帐户类型的逻辑。...在条件设计中,没有这样的检查,以确保每个类型都有一个case语句。如果添加了新类型,我们可以简单地忘记更新每个switch语句。这个问题越严重,我们就越重复我们的switch语句。...相反,多态设计类似如下: ? 从外部的角度来看,我们只是在BankAccount对象上调用getintereUNK()。如果我们创建过程抽象一个工厂类的话,这将更加明显: ?...条件逻辑替换成多态类是非常常见的,因此已经发布了条件语句重构多态类的方法。此外,Martin Fowler的《重构》(255页)也描述了执行这个重构的详细过程。...经验和合理的判断决定何时是条件代码转换为多态代码的合适时间。 结束语 作为程序员,尽管平常所使用的常规技术可以解决大部分的问题,但有时我们应该打破这种常规,主动需求一些创新。

80270
领券