12.22
实验 22:状态模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解状态模式的动机,掌握该模式的结构;
2、能够利用状态模式解决实际问题。
[实验任务一]:银行账户
用Java代码模拟实现课堂上的“银行账户”的实例,要求编写客户端测试代码模拟用户存款和取款,注意账户对象状态和行为的变化。
实验要求:
1. 画出对应的类图;
2. 提交源代码;
package org.test22;
import javafx.scene.media.AudioClip;
public class BankAccount{
private State state;
public BankAccount(State state) {
this.state = state;
}
public void deposit(double amount) {
state.deposit(amount);
}
public void withdraw(double amount) {
if (state instanceof OpenState) {
state.withdraw(amount);
} else {
System.out.println("账户已关闭,不能取款");
}
}
public State getState() {
return this.state;
}
}
package org.test22;
public class Client {
public static void main(String[] args) {
OpenState openState = new OpenState();
ClosedState closedState = new ClosedState();
BankAccount openAccount = new BankAccount(openState);
openAccount.deposit(500); // 存款 500 元
openAccount.withdraw(200); // 取款 200 元,余额不足,不能取款
openAccount.withdraw(500); // 取款 500 元,成功取出 300 元,余额为 500 - 300 = 200 元
System.out.println("当前账户余额:" + openAccount.getState().getBalance());
closedState.deposit(5000);
}
}
package org.test22;
public class ClosedState extends State{
private double balance=0;
@Override
public void deposit(double amount) {
System.out.println("账户已关闭,不能存款");
}
@Override
public void withdraw(double amount) {
System.out.println("账户已关闭,不能取款");
}
@Override
public double getBalance() {
return this.balance;
}
}
package org.test22;
public class OpenState extends State{
private double balance=0;
@Override
public void deposit(double amount) {
System.out.println("存款成功,存款金额:" + amount);
balance+=amount;
}
@Override
public void withdraw(double amount) {
if (balance-amount>=0) {
System.out.println("取款成功,取款金额:" + amount);
balance-=amount;
} else {
System.out.println("余额不足,不能取款");
}
}
@Override
public double getBalance() {
return this.balance;
}
}
package org.test22;
public abstract class State {
public abstract void deposit(double amount);
public abstract void withdraw(double amount);
public abstract double getBalance();
}
3. 注意编程规范。
浙公网安备 33010602011771号