封装就是将相关的方法或者属性抽象成为一个对象。
封装的意义:
  1. 对外隐藏内部实现,接口不变,内部实现自由修改。
  2. 只返回需要的数据和方法。
  3. 提供一种方式防止数据被修改。
  4. 更好的代码复用。
当代码中包含许多条件判断,为了改善代码的可读性和可维护性,我们可以将条件封装。
有两种封装方式:
一、无参数的条件判断,封装为属性
重构前代码
public class RemoteControl{private string[] Functions { get; set; }private string Name { get; set; }private int CreatedYear { get; set; }public string PerformCoolFunction(string buttonPressed){// Determine if we are controlling some extra function// that requires special conditionsif (Functions.Length > 1 && Name == "RCA" && CreatedYear > DateTime.Now.Year - 2)return "doSomething";}}

重构后代码

public class RemoteControl{private string[] Functions { get; set; }private string Name { get; set; }private int CreatedYear { get; set; }private bool HasExtraFunctions{get { return Functions.Length > 1 && Name == "RCA" && CreatedYear > DateTime.Now.Year - 2; }}public string PerformCoolFunction(string buttonPressed){// Determine if we are controlling some extra function// that requires special conditionsif (HasExtraFunctions)return "doSomething";}}

二、有参数的条件判断,封装为方法
重构前代码
 public class RemoteControl{private string[] Functions { get; set; }private int CreatedYear { get; set; }public string PerformCoolFunction(string buttonPressed){// Determine if we are controlling some extra function// that requires special conditionsif (Functions.Length > 1 && buttonPressed== "RCA" && CreatedYear > DateTime.Now.Year - 2)return "doSomething";}}

重构后代码

 public class RemoteControl{private string[] Functions { get; set; }private string Name { get; set; }private int CreatedYear { get; set; }private bool HasExtraFunctions(string buttonPressed){get { return Functions.Length > 1 && buttonPressed== "RCA" && CreatedYear > DateTime.Now.Year - 2; }}public string PerformCoolFunction(string buttonPressed){// Determine if we are controlling some extra function// that requires special conditionsif (HasExtraFunctions(buttonPressed))return "doSomething";}}

转载于:https://www.cnblogs.com/hmloo/p/6292441.html

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

  1. 重构条件-Decompose Conditional分解条件式一

    重构条件-Decompose Conditional分解条件式一 1.分解条件式 1.1.使用场景 你有一个复杂的条件(if-then-else)语句.从if.then.else三个段落中分别提炼出独 ...

  2. CSharpGL(30)用条件渲染(Conditional Rendering)来提升OpenGL的渲染效率

    CSharpGL(30)用条件渲染(Conditional Rendering)来提升OpenGL的渲染效率 当场景中有比较复杂的模型时,条件渲染能够加速对复杂模型的渲染. 条件渲染(Conditio ...

  3. 重构16-Encapsulate Conditional(封装条件)

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

  4. 重构——34分解条件表达式(Decompose Conditional)

    分解条件表达式(Decompose Conditional) 你有一个复杂的条件语句:从if,then,else三个段落中分别提炼出独立函数 一.动机 1.提高代码可读性 2.突出条件逻辑,更清楚的表 ...

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

    继续更新有关重构的博客,前三篇是关于类.函数和数据的重构的博客,内容还算比较 充实吧.今天继续更新,本篇博客的主题是关于条件表达式的重构规则.有时候在实现比较复杂的业务逻辑时,各种条件各种嵌套.如果处 ...

  6. java 按条件注解_Spring 条件注解 @Conditional

    Spring 4提供了一个更通用的基于条件的Bean的创建方式,即使用@Conditional注解. 下面的示例将以不同的操作系统作为条件,我们将通过实现Condition接口,并重写其matches ...

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

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

  8. 工程师必知的代码重构指南

    作者 | CATE LAWRENCE 译者 | 冬雨 策划 | 蔡芳芳 本指南将带你了解进行代码重构的好处.可能遇到的挑战.可以采用的工具和最佳实践,以及重构和技术债务之间的区别. 我们都在寻找清理代 ...

  9. 深入理解条件过滤Conditional

    在分析AutoConfigurationImportSelector的源码时,会先扫描spring-autoconfiguration-metadata.properties文件,最后在扫描sprin ...

最新文章

  1. 2018-3-4 nginx和Tengine 以及高并发的概念
  2. Ubuntu 修改mysql的存储目录
  3. Simulink仿真 第八节 积分模块
  4. Ubuntu16.04LTS安装ROS Kinetic
  5. pert计算公式期望值_PERT和三点估算技术
  6. python项目实战:绘制一朵漂亮的玫瑰花
  7. 微博中的c++议论触发了测试人员的神经
  8. hdu1556 Color the ball
  9. apache 配置 中英
  10. ISAPI_Rewrite
  11. 什么?都1202年了还不懂k8s和容器的关系?!这份k8s指南快拿走不谢!
  12. Pytho 常见模块 / 用法备忘录
  13. 本地repos Mac
  14. 热销超极本iFunk翼S到底怎么样?
  15. string.h头文件
  16. 如何修改计算机软件id号,详解使用软件快手修改ID的操作流程
  17. 7-6 输出三角形面积和周长 (15分)
  18. Oracle连接本地超时提示【ORA-12170 TNS 】之解决办法
  19. 计算一元一次方程Y=kX+b
  20. 下载了免费的txt电子书,如何用Mac打开?

热门文章

  1. 计算机无法上网修复工具,网络异常修复工具,连接后无法上网修复方式
  2. java 深入io_Java高级编程-IO操作深入
  3. win10 电脑触摸板不能滑动_用好笔记本的触摸板(win10小技巧)
  4. c++用向量给句子排序_用C ++对向量排序
  5. python的any函数_Python any()函数
  6. Java LocalTime
  7. amplify color_如何使用Amplify监视Nginx
  8. C++ 11使用thread类多线程编程
  9. 使用PDF-XChange Editor为PDF文件添加签名(图片+签名)
  10. Java开发工程师,每个阶段需要掌握什么重点?