?????????(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);