当前位置: 首页 > news >正文

重构摘要11_处理概括关系

《重构-改善既有代码的设计》Martin Fowler 摘要: 第十一章 处理概括关系

有一批重构手法专门处理类的概括关系(generalization , 即继承关系)

Pull Up Field 字段上移

两个子类有同样字段 --》 移到超类

观察函数怎样使用它们。使用的方式非常相似,考虑归纳到超类

Pull Up Method 函数上移

有些函数,在各个子类中产生全然同样的结果。

将该函数移至超类

某些用到了子类中的參数,能够在父类做一个取值的抽象方法

Pull Up Constructor Body 构造函数本体上移

你在各个子类中拥有一些构造函数。它们本体差点儿全然移至。

在超类中新建一个构造函数。并在子类构造函数中调用它

Push Down Method 函数下移

超类中的某个函数仅仅与部分子类有关

Push Down Field 字段下移

Extract Subclass 提炼子类

类中的某些特性仅仅被某些实例用到。

新建一个子类,将上面所说的那部分特性移到子类中

Extract Superclass 提炼超类

两个类有相似特性

为这两个类建议一个超类,将同样特性移至超类

Extract Interface 提炼接口

若干客户使用类接口中的同一子集,或者两个类的接口有部分同样

将同样的子集提炼到一个独立接口中

Collapse Hiberarch 折叠继承体系

超类和子类之间无太大差别 将它们合为一体

Form TemPlate Method 塑造模板函数

你有一些子类,当中对应的某些函数以同样顺序运行类似的操作。但各个操作的细节上有所不同。

将这些操作分别放进独立函数中,并保持它们都有同样的签名。于是原函数也就变得同样了,然后将原函数上移至超类。

Replace Inheritance with Delegation 以托付代替继承

某个子类仅仅使用超类接口中的一部分。或是根本不须要继承而来的数据。

在子类中新建一个字段用以保存超类;调整子类函数令它改为托付超类;去掉继承关系。

Replace Delegation with Inheritance 以继承代替托付

两个类使用托付关系,且很多极简单的托付函数。

注意:所托对象不止一个其它对象共享。且受托对象是可变的。

不能变为继承关系。


相关文章:

  • 自定义reg52.h头文件(单片机学习重难点核心知识点)
  • leetcode46 Permutation 排列组合
  • Cocos2D-X2.2.3学习笔记8(处理精灵单击、双击和三连击事件)
  • 无法抗拒Minecraft给予超高的自由度和探索-微访谈
  • 移动端播放视频文件
  • 《Spring 5官方文档》翻译邀请
  • 树莓派玩耍笔记1 -- 开箱 amp; 安装系统以及简单配置
  • Bzoj4161 Shlw loves matrixI
  • 《Spring Data 官方文档翻译》3. 其他帮助资源
  • rdiff-backup:一个 Linux 中的远程增量备份工具
  • 虚拟内存映射 段分割 vm_area_struct
  • springcloud-07-eureka HA的高可用配置
  • Mysql5.7 基目录没有data文件夹 解决方法
  • iOS开发 - 不进入待机(屏幕保持唤醒)---UIApplication学习
  • 利用OpenStreetMap(OSM)数据搭建一个地图服务
  • CSS实用技巧干货
  • django开发-定时任务的使用
  • in typeof instanceof ===这些运算符有什么作用
  • Javascript 原型链
  • jdbc就是这么简单
  • LeetCode29.两数相除 JavaScript
  • leetcode98. Validate Binary Search Tree
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • spring boot 整合mybatis 无法输出sql的问题
  • 大主子表关联的性能优化方法
  • 规范化安全开发 KOA 手脚架
  • 后端_MYSQL
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 漂亮刷新控件-iOS
  • 通过git安装npm私有模块
  • 小李飞刀:SQL题目刷起来!
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 如何正确理解,内页权重高于首页?
  • ​VRRP 虚拟路由冗余协议(华为)
  • #{} 和 ${}区别
  • #Linux(make工具和makefile文件以及makefile语法)
  • #大学#套接字
  • $refs 、$nextTic、动态组件、name的使用
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (c语言)strcpy函数用法
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • ***原理与防范
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET Core中的去虚
  • .NET Project Open Day(2011.11.13)
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • @Transient注解
  • @拔赤:Web前端开发十日谈
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell