状态模式
实验 22:状态模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解状态模式的动机,掌握该模式的结构;
2、能够利用状态模式解决实际问题。
[实验任务一]:银行账户
用Java代码模拟实现课堂上的“银行账户”的实例,要求编写客户端测试代码模拟用户存款和取款,注意账户对象状态和行为的变化。
实验要求:
1. 画出对应的类图;
2. 提交源代码;
// BankAccount类,代表银行账户
class BankAccount {
private double balance;
// 构造方法,初始化账户余额
public BankAccount(double initialBalance) {
if (initialBalance >= 0) {
this.balance = initialBalance;
} else {
throw new IllegalArgumentException("初始余额不能为负数");
}
}
// 存款方法
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
} else {
throw new IllegalArgumentException("存款金额必须大于0");
}
}
// 取款方法
public void withdraw(double amount) {
if (amount > 0 && amount <= balance) {
balance -= amount;
} else if (amount <= 0) {
throw new IllegalArgumentException("取款金额必须大于0");
} else {
throw new IllegalArgumentException("余额不足");
}
}
// 获取账户余额的方法
public double getBalance() {
return balance;
}
}
// BankAccountClient类,用于测试银行账户的功能
class BankAccountClient {
public void testBankAccount() {
// 创建一个初始余额为1000的银行账户
BankAccount account = new BankAccount(1000);
// 存款操作
account.deposit(500);
System.out.println("存款后余额:" + account.getBalance());
// 取款操作
account.withdraw(200);
System.out.println("取款后余额:" + account.getBalance());
try {
// 尝试进行非法取款操作(金额大于余额)
account.withdraw(1500);
} catch (IllegalArgumentException e) {
System.out.println("取款失败:" + e.getMessage());
}
try {
// 尝试进行非法存款操作(金额为负数)
account.deposit(-100);
} catch (IllegalArgumentException e) {
System.out.println("存款失败:" + e.getMessage());
}
}
}
// 主程序入口,用于运行测试
public class BankAccountMain {
public static void main(String[] args) {
BankAccountClient client = new BankAccountClient();
client.testBankAccount();
}
}
3. 注意编程规范。