前面几章都是针对重复代码,条件表达等小型的重构,直到本章才开始稍微大型的重构。
其实无外乎

  • 提炼类
  • 提炼子类
  • 提炼超类
  • 提炼接口

一、继承还是组合

这个是个分水岭,在Java编程思想中,有一句话组合优先于继承。
其实继承不是简单是代码层面,在面向对象语言中继承和其子类是一个体系。而组合更相当于你借用其他类来完成功能。
继承相对来说比较严格,有可能该类已经有子类,有超类的情况。

即使选错了,后面还有优化的方法已委托取代继承以继承取代委托

二、提炼子类

这个其实和前面算是重复的以子类取代类型码。这个是使用的继承。

三、提炼超类

这个一般是发现继承体系中又重复代码后采取的动作

四、提炼类

这个比较重要,虽然一个类或者说一个方法中没有重复代码,但是你会感觉一个类做了太多的事情,也就是类的职责没又规划清楚,这个是提炼类就出来

五、提炼接口

这个比表抽象,比如A类有10个功能,B类和C类会使用A类的5个功能,对于另外5个功能B和C不会使用,这个使用你把A组合进去,就会造成责任不清,其他阅读者弄不清到底使用A类的什么功能,如果你把B和C使用的5个功能提炼接口,组合的时候把A向上转型,这个时候责任就会使用的非常清楚

【第十一章】提炼子类/超类/接口/类相关推荐

  1. 《我的眼睛--图灵识别》第十一章:实战演练:图像类识别

    <我的眼睛–图灵识别>第十一章:实战演练:图像类识别 1.与众不同 有些网络游戏非常可爱,不喜欢靠单纯的使用字母和数字这样简单的组合出来的验证图形码,就会搞一些奇奇怪怪的图形图像类的图案选 ...

  2. day24-抽象类与接口类

    接口类 1.继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类 ...

  3. 面向对象 抽象类与接口类

    ############  复习 ############### - 先抽象再继承 ########## 接口类与抽象类 接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码 ...

  4. python 接口是什么_python3中的接口类是什么?怎么用?

    本篇文章要说的类很有意思,叫接口类,这个名字相信小伙伴们还是比较容易记住的.小编想通过接口类给大家带来有趣的操作,毕竟一直学函数和代码,确实是一件需要记忆让人疲惫的事情.希望下面小编带来的例子,能让大 ...

  5. Python学习日记(二十五) 接口类、抽象类、多态

    接口类 继承有两种用途:继承基类的方法,并且做出自己的改变或扩展(代码重用)和声明某个子类兼容于某基类,定义一个接口类interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子 ...

  6. JavaSE_第十一章:常用类

    JavaSE学习历程 第一章:Java初识 第二章:Java语言基础 第三章:选择结构与分支结构 第四章:循环结构 第五章:方法/函数 第六章:数组 第七章:面向对象 第八章:三大特性 第九章:三个修 ...

  7. 第十一章第二题(Person、Student、Employee、Faculty和Staff类)(Person、Student、Employee、Faculty and Staff calss)

    第十一章第二题(Person.Student.Employee.Faculty和Staff类)(Person.Student.Employee.Faculty and Staff calss) 11. ...

  8. java 中普通类继承,抽象类继承,接口类继承,子类一定要重写父类中的方法吗

    一.简单总结,需要重写的有 普通类继承抽象类,重写所有抽象类方法:(不包括普通方法) 普通类继承接口,重写所有接口方法.(不包括default关键字修饰的方法) 详解见下: 普通类继承,并非一定要重写 ...

  9. JAVA获取同一路径下所有子类或接口实现类

    2019独角兽企业重金招聘Python工程师标准>>> 整个测试代码如下: Java代码   package find; import java.io.File; import ja ...

最新文章

  1. python像素大于_用python处理图片实现图像中的像素访问
  2. MYSQL事务隔离级别详解附加实验
  3. 2019年3月20日 894. All Possible Full Binary Trees
  4. div css页面布局 模板_HTML 布局
  5. osgi框架和spring区别_最全153道Spring全家桶面试题,你都知道哪些?(含答案解析)...
  6. Spring Cloud部分源码分析Eureka,Ribbon,Feign,Zuul
  7. SAP License:给SAP顾问的5个小贴士
  8. 用友软件反结账,反记账以及删除凭证操作流程
  9. PHP中json对象转数组过程中去除字符串中的换行与数字方法
  10. 正则表达式匹配yyyyMMdd日期格式
  11. 可见的轮廓线用虚线绘制_机械制图国家标准规定,可见的轮廓线用虚线绘制。...
  12. 怎么看计算机的硬盘容量,Win7怎么看硬盘大小 如何看电脑硬盘大小
  13. android 判断是否安装百度地图,判断手机是否安装高德/百度地图
  14. 安装spark的详细步骤
  15. 校园网升级了WiFi6,笔记本突然搜索不到校园网了
  16. PR标题动画模板 创意动态多行标题注释字幕条pr模板
  17. 计算机专业生看过来,程序员普遍薪资待遇怎么样?10K仅是起点!
  18. 在虚幻引擎中使用Python批处理4_:贴图参数设置
  19. 使用Python的psutil包获取机器IPv4信息
  20. shapenet数据集_三维形状数据的深度特征表示

热门文章

  1. 联想服务器TS130主板芯片组,【ThinkServer TS130参数】ThinkServer TS130系列服务器参数-ZOL中关村在线...
  2. Java校验XML文件
  3. 7.27北京 以我的方式纪念环法--香山游击
  4. 开关电源补偿环路设计(1):基础部分-以Buck 为例
  5. angularJS学习小结——filter
  6. 北京大学推免2020计算机,《北京大学2020年接收外校推免生分析报告(一)》——哪些学校更受青睐?...
  7. 用Java实现简易计算器
  8. 用这4步完成一个有理有据的LOGO 设计
  9. ES初探之——shard和replica
  10. redis的集成在springbooot版本之间差异(主要分为1.4版本之前后之后)