移动方法
-
问题
一个方法在另一个类中比在它自己的类中使用得更多。
-
解决方法
在最常使用该方法的类中创建一个新方法,然后将代码从旧方法移到那里。将原始方法的代码转换为对其他类中新方法的引用,或者将其完全删除。
为什么要重构?
- 您希望将方法移动到包含该方法使用的大部分数据的类。这使得类 在内部更加连贯。
- 您想要移动一个方法以减少或消除调用该方法的类对其所在类的依赖性。如果调用类已经依赖于您计划将方法移动到的类,这将很有用。这减少了类之间的依赖。
如何重构?
-
验证其类中旧方法使用的所有功能。移动它们也可能是个好主意。通常,如果某个功能仅由正在考虑的方法使用,那么您当然应该将该功能移至该方法。如果该功能也被其他方法使用,您也应该移动这些方法。有时移动大量方法比在不同类中建立它们之间的关系要容易得多。
确保该方法未在超类和子类中声明。如果是这种情况,您要么必须避免移动,要么在接受者类中实现一种多态性,以确保在捐赠者类之间拆分的方法具有不同的功能。1
-
在收件人类中声明新方法。您可能希望为新类中的方法指定一个更适合它的新名称。
-
决定您将如何引用收件人类别(
recipient class
)。您可能已经有一个返回适当对象的字段或方法,但如果没有,您将需要编写一个新的方法或字段来存储接收者类的对象。现在您有一种方法可以引用接收者对象和它的类中的一个新方法。有了这一切,您就可以将旧方法变成对新方法的引用。
-
看一看:你能不能完全删除旧方法?如果是这样,请在所有使用旧方法的地方引用新方法。
-
Make sure that the method isn't declared in superclasses and subclasses. If this is the case, you will either have to refrain from moving or else implement a kind of polymorphism in the recipient class in order to ensure varying functionality of a method split up among donor classes. ↩