Replace Parameter with Explicit Methods (以明确函数取代参数
Summary : 你有一个函数,其中完全取决于参数值而采取不同行为。 针对该参数的每一个可能值,建立一个独立函数。 动机: Replace Parameter with Explicit Methods 恰恰相反于 Parameterize Method 。如果某个参数有很多种可能的值,而函数内又以条件表达式检查这些参数值,并根据不同参数值做出不同的行为,那么就应该使用本项重构。调用者原本必须赋予参数适当的值,以决定该函数做出何种响应。现在既然你提供了不同的函数给调用者私用,就可以避免出现条件表达式。此外你还可以获得编译期检查的好处,而且接口也更清楚。如果以参数值决定函数行为,那么函数用户不但需要观察该函数,而且还要判断参数值是否合法,而“合法的参数值”往往很少在文档中被清楚地提出。 就算不考虑编译器检查的好处,只是为了 获得一个清晰的接口,也值得你执行本项重构。哪怕只是给一个内部的布尔变量赋值,相较之下, Witch.beOn() 也比 Switch.setState(true) 要清晰得多。 但是,如果参数值不会对函数行为有太多影响,你就不应该使用 Replace Parameter with Explicit Methods 。如果情况真这样,而你也只需要通过参数为一个字段赋值,那么直接使用设值函数就行了。如果的确需要条件判断的行为,可考虑使用 Replace