前言:
重构发生的时机应该在什么时候呢?
正确:一边写着代码,当完成之后,马上想着是否能够进行重构。
错误:写完代码之后,等以后有时间去重构。
即重构本来就不是一件应该特别拨出时间做的事情,重构应该随时随地进行。
书上有这么一句话,我非常喜欢:懒惰是程序员的一种美德。正如有句话说,不要让你的“勤奋”毁掉了你,有着异曲同工之妙。《重构改善既有代码的设计》的作者说,“我是个很懒惰的程序员,我的懒惰表现形式之一就是:我总是记不住自己写过的代码”,“我不是个伟大的程序员,我只是有着一些优秀习惯的好程序员”。
什么是重构:
在不改变代码外部行为的前提下,对代码做出修改,以改进程序的内部结构。本质上说,重构是在代码写好之后改进它的设计(注意:重构不一定能够提高性能,它提供了一种更高效且受控的代码整理技术,重构又与重写不同,重写代码是发生在现有的代码根本不能工作)。
举个栗子:(在笔试的时候经常会有类似重构的例子)
场景:一个影片出租店的程序,计算每一位顾客的消费金额并打印详单。操作者告诉程序:顾客租了哪些影片、租期多长,程序便根据租赁时间和影片单算出费用。影片分为三类:普通片、儿童片和新片。除了计算费用,还要为常客计算积分,积分会根据租片种类是否为新片而有不同。
未重构前的代码如下:
public class Customer {
//Movie只是一个简单的纯数据类
private static class Movie{
public static final int CHILDRENS = 2;
public static final int REGULAR = 0;
public static final int NEW_RELEASE = 1;
private String _title;
private int _priceCode;
public Movie(String title, int priceCode){
_title = title;
_priceCode = priceCode;
}
public int getPriceCode(){
return _priceCode;
}
public void setPriceCode(int arg){
_priceCode = arg;
}
public String getTitle(){
return