1
我寫了一個GUI供用戶輸入他/她的信用卡號碼。該程序必須返回正確的信用卡類的子類,如萬事達,Visa等基於布爾值返回信用卡的設計模式
這裏是我的代碼:
abstract class CreditCard{
String cardNumber;
public CreditCard(String number) {
cardNumber = number;
}
}
我所有的子類,如萬事達,維薩等擴展信用卡式超。
我的子類的一個實例:
class MasterCC extends CreditCard {
public MasterCC(String number) {
super(number);
}
}
我選擇了工廠設計模式
class CreditCardFactory {
static CreditCard createCard(String number) {
CreditCard cc = null;
if (number.length() == 0 || number.length() > 19)
return cc;
else if (isMasterCard(number))
cc = new MasterCC(number);
else if (isVisa(number))
cc = new VisaCC(number);
else if (isAmericanExpress(number))
cc = new AmExCC(number);
else if (isDiscover(number))
cc = new DiscoverCC(number);
return cc;
}
private static boolean isMasterCard(String number){
if (number.length() != 16)
return false;
return (number.charAt(0) == '5'
&& 1 >= Integer.valueOf(number.charAt(1))
&& Integer.valueOf(number.charAt(1)) <= 5);
}
// more code boolean code
}
我的教授說重做它,因爲它是不是一個好的設計模式來解決這個問題。她說責任不應該是工廠的工作,而應該是子類的工作。
我的解決辦法:
class CreditCardFactory {
public static CreditCard createCard(String number){
CreditCard cc[] = { new AmExCC(number), new VisaCC(number)};
for(int index=0; index<cc.length; index++)
if(cc[index].isMyType())
return cc[index];
return null;
}
}
他沒有提供任何建議,只是「重做它」...? –
這是她。她說驗證哪個子類應該是子類的責任的責任。 –
也許她提出了一個靜態方法來檢查這些標準例如:MasterCard.CheckType()來證明卡是否爲主 –