当代码中充斥着若干条件判断时,代码的真正意图会迷失于这些条件判断之中。这时我喜欢将条件判断提取到一个易于读取的属性或方法(如果有参数)中。重构之前的代码如下:

public class RemoteControl {private String[] Functions;//getter setterprivate String Name;//getter setterprivate int CreatedYear;//getter setter

public String PerformCoolFunction(String buttonPressed) {// Determine if we are controlling some extra function        // that requires special conditionsif (Functions.length > 1 && Name == "RCA" && CreatedYear > new Date().getYear() - 2) {return "doSomething";}return null;}}

重构之后,代码的可读性更强,意图更明显:
public class RemoteControl {private String[] Functions;//getter setterprivate String Name;//getter setterprivate int CreatedYear;//getter setterprivate Boolean HasExtraFunctions;

    public Boolean getHasExtraFunctions() {return Functions.length > 1 && Name == "RCA" && CreatedYear > new Date().getYear() - 2;}public String PerformCoolFunction(String buttonPressed) {// Determine if we are controlling some extra function        // that requires special conditionsif (HasExtraFunctions) {return "doSomething";}return null;}}

来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/jgig11/p/5786338.html

重构16-Encapsulate Conditional(封装条件)相关推荐

  1. Numpy入门[16]——choose函数实现条件筛选

    Numpy入门[16]--choose函数实现条件筛选 参考: https://ailearning.apachecn.org/ numpy高级函数操作之--select.choose 使用Jupyt ...

  2. 重构指南 - 封装条件(Encapsulate Conditional)

    封装就是将相关的方法或者属性抽象成为一个对象. 封装的意义: 对外隐藏内部实现,接口不变,内部实现自由修改. 只返回需要的数据和方法. 提供一种方式防止数据被修改. 更好的代码复用. 当代码中包含许多 ...

  3. 重构——39以多态取代条件表达式(Replace Conditional with Polymorphism)

    以多态取代条件表达式(Replace Conditional with Polymorphism) 你手上有个条件表达式,它根据对象类型的不同而选择不同的行为:将这个条件表达式的每个分支放进一个子类内 ...

  4. Spring系列第20篇:@Conditional通过条件来控制bean的注册

    面试阿里p7被问到的问题(当时我只知道第一个): @Conditional是做什么的? @Conditional多个条件是什么逻辑关系? 条件判断在什么时候执行? ConfigurationCondi ...

  5. windows环境下封装条件wait和signal

    linux 环境有提供好的pthread_cond_wait() 和 phread_signal().pthread_broadcast() windows需要自己封装,利用semophore控制线程 ...

  6. C# 中利用 Conditional 定义条件方法

    利用 Conditional 属性,程序员可以定义条件方法.Conditional 属性通过测试条件编译符号来确定适用的条件.当运行到一个条件方法调用时,是否执行该调用,要根据出现该调用时是否已定义了 ...

  7. 平行空间怎么设置32位_每周推荐 | 空间占用减小32%,具有高级功能的16位逻辑封装...

    TVSOP48 是一款 48 引脚的封装,比 TSSOP48 减少了 32% 的封装面积,把现有功能压缩进一个更小的封装.TVSOP48 是一款高密度封装,间距为 0.4 毫米,有助于减小电路板尺寸和 ...

  8. 四、Spring中使用@Conditional按照条件注册Bean

    以前其实是写过@Condtional注解的笔记的,这里附上链接: Spring中的@conditional注解 但已经忘记的差不多了,所以今天再重新学习下,可以互补着学习 @Contional:按照一 ...

  9. @Conditional进行条件判断等

    场景,有二个组件TulingAspect 和TulingLog ,我的CustomLog组件是依赖于TulingAspect的组件 应用:自己创建一个CustomCondition的类 实现Condi ...

最新文章

  1. 量化人类社会交互行为
  2. 首届MySQL中文用户活动
  3. linux设备驱动——总线、设备、驱动
  4. 第五章--加载内核Kernel.bin
  5. java 基本语法与流程控制_Java基础语法之控制流程
  6. 【Java】不使用比较运算符构造max()和min()
  7. Python 实现新冠病毒分布实时追踪
  8. FPGA时钟激励编写(方法二)
  9. 图解Android - Android GUI 系统 (1) - 概论
  10. mybatis都有哪些executor执行器_Mybatis的SqlSession创建过程详解
  11. python办公实例100例-Python 100例(上)
  12. LeetCode781森林中的兔子题解
  13. 无损连接,函数依赖性判定
  14. Excel 2010 VBA 入门 071 工作表事件之Worksheet_Change
  15. 【模拟器】华三模拟器HCL安装操作指导
  16. 《Pro SQL Server Internals, 2nd edition》节选翻译(一)
  17. matlab封装的模块,matlab模块封装
  18. 36岁程序员2023年第一天上班被裁
  19. 关于String s=1.0 转为INT
  20. WannaCry勒索病毒分析过程**中**(注)

热门文章

  1. 为什么选择react?为前端开发选择React的六大理由
  2. php岗位专业技能,PHP简历专业技能怎么写
  3. mysql -h 日志打印_mysql日志
  4. mongodb 监控权限_分布式监控系统Zabbix3.4-针对MongoDB性能监控操作笔记
  5. python的else_Python3 if...elseif...else语句
  6. python与机器学习(一)图片相关操作
  7. P1144 最短路计数
  8. 日本新研究:将光伏组件高温高湿试验速度提高70倍
  9. mysql替换字段的部分数据
  10. iostat命令简单使用