gpt4 book ai didi

java - 基于 boolean 值返回信用卡的设计模式

转载 作者:行者123 更新时间:2023-11-30 02:58:32 25 4
gpt4 key购买 nike

我编写了一个 GUI,供用户输入他/她的信用卡号。该程序必须返回正确的信用卡类子类,例如 MasterCard、Visa 等。

这是我的代码:

abstract class CreditCard{

String cardNumber;

public CreditCard(String number) {
cardNumber = number;
}
}

我的所有子类(例如 MasterCard、Visa 等)都扩展了 CreditCard 父类(super class)。

我的子类之一的示例:

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;
}

}

最佳答案

从我的角度来看,您只需将这些 boolean 方法移至具体类即可。工厂方法可能类似于:

static CreditCard createCard(final String number) {

if (MasterCC.isValidNumber(number)) {
return new MasterCC(number);
}

if (VisaCC.isValidNumber(number)) {
return new VisaCC(number);
}

if (AmExCC.isValidNumber(number)) {
return new AmExCC(number);
}

if (DiscoverCC.isValidNumber(number)) {
return new DiscoverCC(number);
}

return null;
}

关于java - 基于 boolean 值返回信用卡的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36557399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com