????????????????????????????????????????????????????£??????????????????????????????????????????????£?

?????κ??????????д???????????????????Ψ??д???????????????????????????;

?????2??????????????;

??????????bug?????????д??????????????????bug;

????????о?????д?????????????????????????е?????????;

???????????????????????????????????????????????????????????????????????;

???????????????????????????????;

????д????????????????????С????漰???????????????????????????С????????д?????????????????????????????????????????????????????????????????????????????;

??????????????????????????????????????????θ??;

????Kent Beck:?????????????????????????????Щ????ó????????;

????????(Variable)

????????????????????????????????????????????????????????????????????????????????????????á??????????????????????????????????????????????????????????????????????????????????????????

????doublegetPrice(){

????int basePrice = _quantity* _itemPrice;

????double discountFactor;

????if (basePrice > 1000) discountFactor = 0.95;

????else discountFactor = 0.98;

????return basePrice * discountFactor;

????}

??????????

????double getPrice(){

????return basePrice()* discountFactor();

????}

????private int basePrice(){

????return _quantity* _itemPrice;

????}

????private double discountFactor(){

????if (basePrice()> 1000) return0.95;

????else return 0.98;

????}

??????????????????????????????????????????????????????????????

????if ((platform.toUpperCase().indexOf("MAC")> -1)&&

????(browser.toUpperCase().indexOf("IE")> -1)&&

????wasInitialized()&& resize> 0 )

????{

????// do something

????}

??????????

????final booleanisMacOs = platform.toUpperCase().indexOf("MAC")>-1;

????final boolean isIEBrowser =browser.toUpperCase().indexOf("IE") > -1;

????final booleanwasResized = resize >0;

????if (isMacOs&& isIEBrowser&& wasInitialized()&& wasResized){

????// do something

????}

?????????????????????????????????????????????????????????????????????????????????????????????????÷?????????????????????????????????????????????????????????????????????????????λ????????????????????????

?????????(Extract Method)

??????????????????????????С?????step1??step2??step3???????????趼???????????????????Щ???????????????????????????????????????????????????????????????????????????????????????????????????δ??????????????????????????????????÷??????????????????????δ?????????????????????????????????????γ???÷?????

???????????????????????????????????????????????????????????????????????????ü?????????????????в??????????????????????????????????????????????????????

??????????????????????????У????к???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

????????????????????????????????????????????????????????????????????????????????????????????????????????÷?????????????????????????????????????????????????????????????????????γ?????????????????

???????????????????????????????????????????????????????????????????????????????С?

????class Account...

????private AccountType_type;

????private int_daysOverdrawn;

????double overdraftCharge(){

????if (_type.isPremium()){

????double result = 10;

????if (_daysOverdrawn > 7) result += (_daysOverdrawn -7)* 0.85;

????return result;

????}

????else return _daysOverdrawn * 1.75;

????}

????double bankCharge(){

????double result = 4.5;

????if (_daysOverdrawn > 0) result +=overdraftCharge();

????return result;

????}

??????????

????classAccount...

????private AccountType _type;

????private int _daysOverdrawn;

????double overdraftCharge(){

????return _type.overdraftCharge(_daysOverdrawn);

????}

????double bankCharge(){

????double result = 4.5;

????if (_daysOverdrawn > 0)

????result += _type.overdraftCharge(_daysOverdrawn);