gpt4 book ai didi

Java:银行账户交易限制 -> 如何表示某些账户没有限制?

转载 作者:行者123 更新时间:2023-12-02 02:24:59 25 4
gpt4 key购买 nike

我有一个关于银行账户单笔交易限额的快速问题。我有不同类型的银行账户,每个账户都有一定的单笔交易限额。但是,这些帐户类型中的某些没有交易限制。我可以想出一个非常简单的解决方案,它只使用一个常量来表示(参见下面的示例)。

private static final double NO_TRANSACTION_LIMIT = -1;  

public enum BankAccountType {
GIRO_MINOR(0, 20, "Minor Account"),
GIRO_STUDENT(0, 200, "Student Account"),
GIRO_NORMAL(-2000, 4000, "Normal Account"),
SAVING(0, NO_TRANSACTION_LIMIT, "Saving Account");
// ...
private double transactionLimit;
// ...
public boolean hasTransactionLimit() {
return transactionLimit == NO_TRANSACTION_LIMIT;
}
}

经过一番思考,我认为一定有更好的解决方案来解决这个问题。因为如果由于某种原因在事务限制之前未检查 hasTransactionLimit() 方法,则可能会导致不需要的行为。
所以我的问题是:实现这样的行为的好策略是什么?不知怎的,我想到了空对象模式,但我很不确定。

最佳答案

我将使用方法 isTransactionAllowed(int amount) 创建一个接口(interface) BankAccount,而不是使用返回交易限制的枚举。

因为您想要对枚举执行的操作是执行特定于类型的代码。这就是枚举被命名为 ...Type 的原因。在像 java 这样的面向对象语言中,您应该使用多态性来做到这一点。

例如

public interface BankAccount {
public boolean isTransactionAllowed(int amount);
}

具体的银行账户可以回答这个问题。静态或基于其实际状态。例如。 10 天内允许的交易限额为 200 笔,或者该银行账户允许的交易限额为 200 笔,而所有其他此类帐户仅允许 100 笔。

例如静态:

public class MinorBankAccount implements BankAccount {

private static final int MINOR_ACCOUNT_TRANSACTION_LIMIT = 20;

public boolean isTransactionAllowed(int amount) {
return amount <= MINOR_ACCOUNT_TRANSACTION_LIMIT;
}

}

你所做的通常是贫血设计的暗示。更多详情请查看我的博客 Enums as type discriminator anti-pattern

关于Java:银行账户交易限制 -> 如何表示某些账户没有限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47922670/

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