?????????????????????????????????????????????????????????????????????????????????????????????????÷?????????????????????????????????????????????????????????????????????????????λ????????????????????????
?????????(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);
return result;
}
classAccountType...
double overdraftCharge(Account account){
if (isPremium()){
double result = 10;
if (account.getDaysOverdrawn()> 7)
result += (account.getDaysOverdrawn()- 7)* 0.85;
return result;
}
else return account.getDaysOverdrawn()* 1.75;
}

?????????(Extract Class)
??????????????????????????????????????????????????????????λ???壡——?????????????????????????????????????????????????????????????????????С????????????????????????????????????????????????????????????????£?
????1.?????????(SRP)-???????????y?????????????仯?????
???????????????????????????????????Χ????????顣MVC????????????????????????????????????????????????????????????V????????????????????????
????????????????????????????γ?????DTO????????????????????????????????????????????γ?????Facade???????????????????γɡ???????????????????????????
???????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????÷?????????????????????????????????????????????????????????????????????γ?????????????????
???????????Υ???????????????????????????Override???е????????????Щ???????????????????????????????????????????????????в???
????2.????——??????(OCP)-?????????????????
???????????仯???????????μ??????????????????????е????????????????????????????????????????????????仯???μ???????仯?????????
????3.Liskov?滻???(LSP)
?????????????????滻??????????????????????????滻??????????????????????????????????????????ο??????β???????ε??????裺?????????????仯?????????ε??????裺?????????????????????β????????μ?С?
????4.???????????(DIP)-?????鯔?????????????飻?????????????????

????????????????????????????????????????????????????????????????????????????????????????????仯???????????仯?????????????????????仯??
?????????????????????????????LSP???????????????????????????????????????ж?????????????????????????????????????????????