2023/10/29 每日总结
今天完成了设计模式实验22
实验 22:状态模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解状态模式的动机,掌握该模式的结构;
2、能够利用状态模式解决实际问题。
[实验任务一]:银行账户
用Java代码模拟实现课堂上的“银行账户”的实例,要求编写客户端测试代码模拟用户存款和取款,注意账户对象状态和行为的变化。
源代码
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(); }