提取类
问题
当一个班级做两个班级的工作时,尴尬就产生了。
解决方案
相反,创建一个新类,并将负责相关功能的字段和方法放在其中。
之前

后

为什么重构
课程总是以清晰易懂的方式开始。他们做自己的工作,管好自己的事,不干涉其他班级的工作。但是随着程序的扩展,会添加一个方法,然后是一个字段……最终,一些类执行的职责比预想的要多。
好处
这种重构方法将有助于保持对单一责任原则.类的代码将更加明显和容易理解。
单一职责类更可靠,更能容忍更改。例如,假设您有一个类负责十件不同的事情。当您更改这个类以使其在一件事情上更好时,您可能会在其他九件事情上破坏它。
缺点
- 如果您“过度”使用这种重构技术,您将不得不求助于内联类.
如何重构
在开始之前,决定您希望如何准确地划分类的职责。
创建一个包含相关功能的新类。
在旧类和新类之间创建关系。最佳情况下,这种关系是单向的;这允许重用第二个类而不会出现任何问题。尽管如此,如果你认为双向关系是必要的,这总是可以建立的。
使用移动领域而且移动方法对于您决定移动到新类中的每个字段和方法。对于方法,从私有方法开始,以减少产生大量错误的风险。尝试一次只重新定位一点点,并在每次移动后测试结果,以避免在最后修复错误的堆积。
在完成移动之后,再看一下结果类。为了增加清晰度,可以重命名具有更改职责的旧类。再次检查是否可以摆脱双向类关系(如果存在的话)。
还要考虑新类从外部的可访问性。你可以把这个类设为私有,通过旧类的字段来管理它,从而对客户端完全隐藏这个类。或者,您可以通过允许客户端直接更改值来将其设置为公共的。这里的决定取决于当对新类中的值进行意外的直接更改时,旧类的行为有多安全。