以多态取代条件表达式(Replace Conditional with Polymorphism)

你手上有个条件表达式,它根据对象类型的不同而选择不同的行为;将这个条件表达式的每个分支放进一个子类内的覆写函数中,然后将原始的函数声明为抽象函数

一、动机

1、面向对象术语中,听上去最高贵的词非多态莫属

2、正因为有了多态,所以你会发现,类型码的switch语句以及基于类型名称的if-then-else语句在面向对象程序中很少出现

二、做法

1、Replace Type Code with Subclass,Replace Type Code with State/Strategy

2、如果要处理的条件表达式是一个更大函数的一部分,先Extract Method

3、如果有必要,使用Move Method将条件表达式放置到继承结构的顶端

4、任选一个子类,在其中建立一个函数,使之覆写超类中容纳条件表达式的那个函数,将与该子类相关的条件表达式分支复制到新建函数中,并对它进行适当调整

5、为了顺利进行这一步骤,你可能需要将超类中的某些private字段声明为protected

6、编译,测试

7、在超类中删掉条件表达式内被复制的分支

8、编译,测试

9、针对条件表达式的每个分支,重复上述过程,直到所有的分支都被移到子类内的函数为止

10、将超类之中容纳条件表达式的函数声明为抽象函数

重构——39以多态取代条件表达式(Replace Conditional with Polymorphism)相关推荐

  1. 重构手法——提炼函数、搬移函数、以多态取代条件表达式

    目录 我的心路历程 我的学习概括 Extract Method(提炼函数) 动机*--做法 动机--做法* Move Method(搬移函数) 动机*--做法 动机--做法* Replace Cond ...

  2. 改善代码设计 —— 简化条件表达式(Simplifying Conditional Expressions)

    系列博客 1. 改善代码设计 -- 优化函数的构成(Composing Methods) 2. 改善代码设计 -- 优化物件之间的特性(Moving Features Between Objects) ...

  3. 重构-改善既有代码的设计:简化条件表达式(七)

    简化条件表达式 1.Decompose Conditional 分解条件表达式 你有一个复杂的条件语句.从if.then.else三个段落中分别提炼出独立函数. 程序之中,复杂的条件逻辑是最常导致复杂 ...

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

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

  5. Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式)

    函数中的条件逻辑使人难以看清正常的执行路径 double getPayAmount() {double result;if (isDead) {result = deadAmount();} else ...

  6. 如何以卫语句取代嵌套条件表达式

    本文分享自华为云社区<以卫语句取代嵌套条件表达式 (Replace Nested Conditional with Guard Clauses)>,作者:JavaEdge. 动机 条件表达 ...

  7. 必会重构技巧:使用多态替换条件

    使用多态替换条件:指在进行类型检查和执行某些类型操作时,最好将算法封装在类中,并且使用多态来对代码中的调用进行抽象 举例理解:看定义可能比较迷糊,其实说的简单一点,对于使用分支语句并且分支条件是和类型 ...

  8. java多态替换switch_第1章 重构,第一个案例(3):运用多态取代switch

    3.运用多态取代与价格相关的条件逻辑 3.1 switch和"常客积分"代码的再次搬迁 (1)switch:最好不要在另一个对象的属性上运用switch语句 switch(getM ...

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

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

最新文章

  1. 不通过AppStore,在iOS设备上直接安装应用程序的原理
  2. php facade模,PHP 设计模式之外观模式 Facade
  3. abap-在table control中实现查找功能
  4. 目前流行的装修风格_当下最流行的十大装修风格。目前主流的装修风格前十
  5. cocos2d-x游戏实例(25)-简易动作游戏(3)
  6. docker centos node nginx
  7. matlab填充点面,求大神指点绘制空间内散点图的包络面,,,散点程序如下
  8. Spring Boot 一个依赖搞定 session 共享,没有比这更简单的方案了!
  9. lisp 发凹圆角_css能实现这样的内凹圆角吗?如何实现?具体代码是!!
  10. strace动态调试 php,PHP实现通过strace定位故障原因的方法
  11. postman json 中写注释_Swagger界面丑、功能弱怎么破?用Postman增强下就给力了!
  12. 添加游戏到游戏浏览器中的小工具
  13. stl算法:next_permutation剖析
  14. 电视android怎么连接手机助手下载,电视与手机怎么连接?最实用的三种小技巧!...
  15. SQLyog备份数据库
  16. SSH 与 SFTP
  17. Linux运维工程师面试题库,Linux运维工程师面试题库
  18. DLL注入——使用注册表
  19. php电影模板下载,【PHP源码】团啊VIP电影系统V3.7.6源码下载 带自动采集+手机版模板...
  20. 计算机网络设计——企业网络规划与搭建

热门文章

  1. AIX下删除LV后的现场保护和数据恢复方案
  2. ASP.NET Web 页面生命中的一天
  3. mac mysql 可视化工具_推荐3款好用的Redis、MySQL和MongoDB可视化管理工具
  4. [T-ARA][Bo Peep Bo Peep]
  5. Wireshark网络抓包(四)——工具
  6. 面向对象编程(一)——面向对象和面向过程
  7. linux下安装MySQL出错file /usr/share/mysql/charsets/latin2.xml from install of MySQL-......
  8. Delphi APP 開發入門(五)GPS 定位功能
  9. 切换运行时用户以及用户组
  10. Silverlight4.0(9) 之 分页控件轻量级的Session