状况:函数本体不再需要某个参数,那么将该参数去除。
动机:
1、参数指出函数信息,不同参数代表不同意义。函数调用这必须为每一个参数操心该传什么东西进去。——如果不去掉参数,那就为每一次调用多费一份心。
2、如果你发现有很多调用者,那么为了不让调用者操心,你可以这样做,把要移除的参数设置为某个默认值(如null),这样调用者只传那些没有默认值的参数。
Separate Query from Modifier
状况:如果某个函数既返回对象的状态值,又修改(副作用)对象状态(state),那么建立两个不同的函数,其中一个负责查询,另一个负责修改。
Example:
Parameterize Method
状况:如果若干函数做了类似的工作,但在函数本体中包含了不同的值,那么建立单一函数,以参数表达那些不同的值。
动机:
1、一般是因为有少数几个值不同,所以建立了几个相似的函数。
2、分离的函数替换为一个统一的函数,通过参数来处理那些变化情况,以简化问题。
3、去除重复的代码,提高灵活性。——可以使用这个参数处理其他变化情况。
Example:
Replace Parameter with Explicit Methods
状况:你有一个函数,其内完全取决于参数值而采取不同的反应,那么针对该参数的每个值,建立一个独立的函数。
动机:
1、如果某个参数有离散值,而函数内又以条件式检查这些参数值,并根据不同的参数值做出不同的反应,那么就应该使用本次重构。
2、可以获得好处:“编译期代码检查”,“接口更清楚”(如果用参数值决定函数行为,那么函数用户不但需要观察该函数,而且还要判断参数是否“合法化”。——而合法的参数,很少在文档中提到,必须通过上下文,才能判断)
3、不考虑“编译期检验”的好处,为了获取一个清晰的接口,我们也值得这么做。
Example:
Preserve Whole Object
状况:如果你从某个对象中取出若干值,将它们作为某一次函数调用中的参数,那么改使用(传递)整个对象。
动机:
1、参数列更稳固;
2、提高代码的可读性;——过长的参数列很难使用,因为调用者和被调用者都必须记住这些参数的用途。
Example:
Replace Parameter with Methods