【第十一章】提炼子类/超类/接口/类
前面几章都是针对重复代码,条件表达等小型的重构,直到本章才开始稍微大型的重构。
其实无外乎
- 提炼类
- 提炼子类
- 提炼超类
- 提炼接口
一、继承还是组合
这个是个分水岭,在Java编程思想中,有一句话组合优先于继承。
其实继承不是简单是代码层面,在面向对象语言中继承和其子类是一个体系。而组合更相当于你借用其他类来完成功能。
继承相对来说比较严格,有可能该类已经有子类,有超类的情况。
即使选错了,后面还有优化的方法已委托取代继承 和以继承取代委托
二、提炼子类
这个其实和前面算是重复的以子类取代类型码。这个是使用的继承。
三、提炼超类
这个一般是发现继承体系中又重复代码后采取的动作
四、提炼类
这个比较重要,虽然一个类或者说一个方法中没有重复代码,但是你会感觉一个类做了太多的事情,也就是类的职责没又规划清楚,这个是提炼类就出来
五、提炼接口
这个比表抽象,比如A类有10个功能,B类和C类会使用A类的5个功能,对于另外5个功能B和C不会使用,这个使用你把A组合进去,就会造成责任不清,其他阅读者弄不清到底使用A类的什么功能,如果你把B和C使用的5个功能提炼接口,组合的时候把A向上转型,这个时候责任就会使用的非常清楚
【第十一章】提炼子类/超类/接口/类相关推荐
- 《我的眼睛--图灵识别》第十一章:实战演练:图像类识别
<我的眼睛–图灵识别>第十一章:实战演练:图像类识别 1.与众不同 有些网络游戏非常可爱,不喜欢靠单纯的使用字母和数字这样简单的组合出来的验证图形码,就会搞一些奇奇怪怪的图形图像类的图案选 ...
- day24-抽象类与接口类
接口类 1.继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类 ...
- 面向对象 抽象类与接口类
############ 复习 ############### - 先抽象再继承 ########## 接口类与抽象类 接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码 ...
- python 接口是什么_python3中的接口类是什么?怎么用?
本篇文章要说的类很有意思,叫接口类,这个名字相信小伙伴们还是比较容易记住的.小编想通过接口类给大家带来有趣的操作,毕竟一直学函数和代码,确实是一件需要记忆让人疲惫的事情.希望下面小编带来的例子,能让大 ...
- Python学习日记(二十五) 接口类、抽象类、多态
接口类 继承有两种用途:继承基类的方法,并且做出自己的改变或扩展(代码重用)和声明某个子类兼容于某基类,定义一个接口类interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子 ...
- JavaSE_第十一章:常用类
JavaSE学习历程 第一章:Java初识 第二章:Java语言基础 第三章:选择结构与分支结构 第四章:循环结构 第五章:方法/函数 第六章:数组 第七章:面向对象 第八章:三大特性 第九章:三个修 ...
- 第十一章第二题(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. ...
- java 中普通类继承,抽象类继承,接口类继承,子类一定要重写父类中的方法吗
一.简单总结,需要重写的有 普通类继承抽象类,重写所有抽象类方法:(不包括普通方法) 普通类继承接口,重写所有接口方法.(不包括default关键字修饰的方法) 详解见下: 普通类继承,并非一定要重写 ...
- JAVA获取同一路径下所有子类或接口实现类
2019独角兽企业重金招聘Python工程师标准>>> 整个测试代码如下: Java代码 package find; import java.io.File; import ja ...
最新文章
- python像素大于_用python处理图片实现图像中的像素访问
- MYSQL事务隔离级别详解附加实验
- 2019年3月20日 894. All Possible Full Binary Trees
- div css页面布局 模板_HTML 布局
- osgi框架和spring区别_最全153道Spring全家桶面试题,你都知道哪些?(含答案解析)...
- Spring Cloud部分源码分析Eureka,Ribbon,Feign,Zuul
- SAP License:给SAP顾问的5个小贴士
- 用友软件反结账,反记账以及删除凭证操作流程
- PHP中json对象转数组过程中去除字符串中的换行与数字方法
- 正则表达式匹配yyyyMMdd日期格式
- 可见的轮廓线用虚线绘制_机械制图国家标准规定,可见的轮廓线用虚线绘制。...
- 怎么看计算机的硬盘容量,Win7怎么看硬盘大小 如何看电脑硬盘大小
- android 判断是否安装百度地图,判断手机是否安装高德/百度地图
- 安装spark的详细步骤
- 校园网升级了WiFi6,笔记本突然搜索不到校园网了
- PR标题动画模板 创意动态多行标题注释字幕条pr模板
- 计算机专业生看过来,程序员普遍薪资待遇怎么样?10K仅是起点!
- 在虚幻引擎中使用Python批处理4_:贴图参数设置
- 使用Python的psutil包获取机器IPv4信息
- shapenet数据集_三维形状数据的深度特征表示
热门文章
- 联想服务器TS130主板芯片组,【ThinkServer TS130参数】ThinkServer TS130系列服务器参数-ZOL中关村在线...
- Java校验XML文件
- 7.27北京 以我的方式纪念环法--香山游击
- 开关电源补偿环路设计(1):基础部分-以Buck 为例
- angularJS学习小结——filter
- 北京大学推免2020计算机,《北京大学2020年接收外校推免生分析报告(一)》——哪些学校更受青睐?...
- 用Java实现简易计算器
- 用这4步完成一个有理有据的LOGO 设计
- ES初探之——shard和replica
- redis的集成在springbooot版本之间差异(主要分为1.4版本之前后之后)