将账户抽象为具有状态和行为的银行独立实体 :
java
public class BankAccount {
private String accountNumber;
private String accountHolder;
private double balance;
private List transactions;// 构造方法 public BankAccount(String number, String holder) { this.accountNumber = number; this.accountHolder = holder; this.balance = 0.0; this.transactions = new ArrayList<>(); }}
这里的关键点在于:
1. 使用private修饰符严格封装敏感字段
2. 初始余额默认设为0并通过交易记录变更
3. 交易记录使用独立集合存储所有资金变动都应通过严格封装的方法完成:
java
public void deposit(double amount) {
if (amount <= 0) {
throw new IllegalArgumentException("存款金额必须大于0");
}
this.balance += amount;
transactions.add(new Transaction(
TransactionType.DEPOSIT,
amount,
"现金存款"
));
}public void withdraw(double amount) throws InsufficientFundsException {
if (amount > balance) {
throw new InsufficientFundsException("余额不足");
}
this.balance -= amount;
transactions.add(new Transaction(
TransactionType.WITHDRAWAL,
amount,
"ATM取现"
));
}关键安全措施包括:
1. 输入参数校验
2. 余额不足的专项异常
3. 原子化的余额变更与记录保存
4. 清晰的业务描述生成java
public class Transaction {
private LocalDateTime timestamp;
private TransactionType type;
private double amount;
private String description;public enum TransactionType { DEPOSIT, WITHDRAWAL, TRANSFER, INTEREST } // 构造方法 public Transaction(TransactionType type, double amount, String desc) { this.timestamp = LocalDateTime.now(); this.type = type; this.amount = amount; this.description = desc; }}
这种设计允许我们:
- 精确记录每笔交易的时间戳
- 通过枚举规范交易类型
- 保留可读的业务描述
- 支持后续的审计追踪强大的查询能力是账户系统的核心价值:
java
public List getTransactionsByType(TransactionType type) {
return transactions.stream()
.filter(t -> t.getType() == type)
.collect(Collectors.toList());
}public List getRecentTransactions(int days) {
LocalDateTime cutoff = LocalDateTime.now().minusDays(days);
return transactions.stream()
.filter(t -> t.getTimestamp().isAfter(cutoff))
.sorted(Comparator.reverseOrder())
.collect(Collectors.toList());
}通过Java Stream API实现:
- 按类型筛选交易记录
- 时间范围查询优化
- 自动排序功能
- 链式方法调用的可读性🔥《微信域名检测接口、银行
持久化存储
:考虑使用JPA注解将类映射到数据库表
java @Entity public class BankAccount { @Id private String accountNumber; // 其他字段... }并发控制
:对修改方法添加synchronized关键字
java public synchronized void transfer(BankAccount target, double amount) { // 转账逻辑 }日志增强
:集成SLF4J记录重要操作java
private static final Logger logger = LoggerFactory.getLogger(BankAccount.class);public void deposit(double amount) {
logger.info("存款操作开始,账户系统的核心类设计
任何银行系统的根基都在于账户类的封装 。交易记录的精细化建模
交易不是简单的数值变化,金额 :{}", amount);
// 业务逻辑
}这些实践使系统具备企业级应用的基本特征,
本文通过实战案例讲解银行账户系统的类设计方法,我们采用经典的面向对象思想 ,