1.1 起点
如果你发现子级需要未程序添加一个特性,而代码结构使你无法方便的达到目的,那么就先重构那个程序,使特性的添加比较容易的进行,然后再添加特性
1.2 重构第一步
为即将修改的代码建立一组可靠的测试环境!(这些测试必须有自我的检验能力)
1.3 分解并重组statement()
注意:
(1)代码块越小,代码的功能就愈容易管理,代码的处理和一地哦那个也就越轻松;
(2)重构的技术就是以微小的步伐修改程序,如果发现错误,很容易便可以发现它;
1,代码的第一阶段找出代码的逻辑泥团并运用Extract Method(110 提炼函数);
要点:局部变量,参数,返回值
2,修改变量名称,写出人类容易理解的代码
3,绝大多数情况,函数应该放在它所使用的数据的所属对象内。所以amountFor()应该移动到Rental类,因为这个函数使用都是来自Rental类的信息
4,去除临时变量,因为他会导致大量的参数传来传去,很容易跟丢他们,尤其在长长的函数,但是有可能需要付出性能的代价
1.4 运用多态取代与价格相关的条件逻辑
1,switch语句,最后不要再另一个对象的属性基础上运用swtich语句,如果不得不使用,也应该在对象自己的数据上使用,而不是在别人的数据上使用class Rental... double getCharge(){ double result=0; switch(getMovie().getPriceCode()){ 。。。 } }
这意味则会getCharge()应该移动到movie类里去
注意:可以用多态取代swtich语句,但是一部影片可以在生命周期内修改自己的分类,一个对象却不能在生命周期内修改子级所属的类,不过有一个解决的方法,state模式,
这样的好处是:如果我要修改任何嘉禾有关的行为,或是添加新的定价标准,或是加入其它决定于价格的行为,程序的修改会容易的多,如果是复杂系统有十多个于价格相关的函数,程序的修改会很容易