多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
反向重构:字段下移(361) ![](https://box.kancloud.cn/642899eb038d35851bd1c41958e6f58d_190x375.jpeg) ``` class Employee {...} // Java class Salesman extends Employee {  private String name; } class Engineer extends Employee {  private String name; } ``` ![](https://box.kancloud.cn/a3bed334e2e1f6d1a46c5039deb25af9_91x152.jpeg) ``` class Employee {  protected String name; } class Salesman extends Employee {...} class Engineer extends Employee {...} ``` ### 动机 如果各子类是分别开发的,或者是在重构过程中组合起来的,你常会发现它们拥有重复特性,特别是字段更容易重复。这样的字段有时拥有近似的名字,但也并非绝对如此。判断若干字段是否重复,唯一的办法就是观察函数如何使用它们。如果它们被使用的方式很相似,我就可以将它们提升到超类中去。 本项重构可从两方面减少重复:首先它去除了重复的数据声明;其次它使我可以将使用该字段的行为从子类移至超类,从而去除重复的行为。 许多动态语言不需要在类定义中定义字段,相反,字段是在第一次被赋值的同时完成声明。在这种情况下,字段上移基本上是应用构造函数本体上移(355)后的必然结果。 ### 做法 - 针对待提升之字段,检查它们的所有使用点,确认它们以同样的方式被使用。 - 如果这些字段的名称不同,先使用变量改名(137)为它们取个相同的名字。 - 在超类中新建一个字段。 > 新字段需要对所有子类可见(在大多数语言中`protected`权限便已足够)。 - 移除子类中的字段。 - 测试。