《重构》读书笔记 第七章

在对象之间迁移数据

7.1 Move Method (搬移函数)

如果一个类有太多行为,或如果一个类与另一个类有太多合作而形成高度耦合,就需要搬移函数
在类中寻找这样的函数:使用另一个对象的次数比使用自己所驻对象的次数还多

7.2 Move Field (搬移字段)

对一个字段,在其所驻类之外的另一个类中有更多函数使用了它,我么就会考虑搬移这个字段

7.3 Extra Class (提炼类)

动机:

  1. 一个类应该是一个清楚的抽象,处理一些明确的责任,如果类中积累的责任和功能越来越多,就可以考虑将其拆分
  2. 如果子类化只影响类的部分特性,或者发现某些特性需要以一种方式来子类化,某些特性需要以另一种方式子类化,这就意味着需要分解原来的类

注意的点:

  • 尽量是旧类使用新类的方法和特性,尽量避免双向依赖
  • 先搬移低层函数(被其他函数调用多于调用其他函数)再搬移高层函数
  • 搬移完成后决定是否公开新类

7.4 inline class (将类内联化)

某个类没有做太多事情,将这个类的所有特性搬移到另一个类中(必须是和这个类功能相同的类),然后移除原类

7.5 Hide Delegate (隐藏委托关系)

客户通过一个委托类来调用另一个对象,在服务类上建立客户所需的所有函数,用以隐藏委托关系

这样做的好处就是客户只需要了解服务端,而委托类对于客户类来说是隐藏的

宗旨:
尽可能减少一个类了解系统其他部分的可能性 (耦合度尽量低)

7.6 Remove Middle Man (移除中间人)

这一条和7.5的做法正好相反

如果在服务类上建立了太多的客户所需函数, 服务类就变成了一个中间人,此时就应该让客户直接调用委托类

7.6和7.5要如何选择:
书中认为是完全是凭经验,尺度不好把握,感觉不合适可以随时调整

7.7 Introduce Foreign Method (引入外加函数)

当你需要为提供服务的类增加一个函数,但你无法修改这个类,需要在客户类中建立一个函数,并以第一参数形式传入一个服务类实例。

7.8 Introduce Local Extension (引入本地扩展)

本条是7.7的升级版,如果7.7的操作做的过多(两次以上),那么可以考虑子类化或者包装类的方式,这两种方案统称为本地扩展

你可能感兴趣的:(《重构》读书笔记 第七章)