ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
### Pull Up Field(值域上移) 两个subclasses 拥有相同的值域。 将此一值域移至superclass。 ![](https://box.kancloud.cn/2016-08-15_57b1b5aa4ce51.gif) **动机(Motivation)** 如果各个subclass 是分别开发的,或者是在重构过程中组合起来的,你常会发现它们拥有重复特性,特别是值域更容易重复。这样的值域有时拥有近似的名字,但也并非绝对如此。判断若干值域是否重复,惟一的办法就是观察函数如何使用它们。如果它们被使用的方式很相似,你就可以将它们归纳到superclass 去。 本项重构从两方面减少重复:首先它去除了「重复的数据声明」;其次它使你可以将使用该值域的行为从subclass 移至superclass,从而去除「重复的行为」。 **作法(Mechanics)** - 针对待提升之值域,检查它们的所有被使用点,确认它们以同样的方式被使用。 - 如果这些值域的名称不同,先将它们改名,使每一个名称都和你想为superclass 值域取的名称相同。 - 编译,测试。 - 在superclass 中新建一个值域。 - 如果这些值域是private ,你必须将superclass 的值域声明为protected,这样subclasses 才能引用它。 - 移除subclass 中的值域。 - 编译,测试。 - 考虑对superclass 的新建值域使用Self Encapsulate Field 。