一.内容说明
某银行系统定义的账户有三种状态:
(1)如果账户中余额大于等于0,此时账户的状态为绿色,即正常状态,表示既可以向该账户存款,也可以从该账户取款。
(2)如果账户中余额小于0,并且大于等于-1000,则账户的状态为黄色,即欠费状态,此时既可以向该账户存款也可以从该账户取款。
(3)如果账户中余额小于-1000,那么账户的状态为红色,即透支状态,此时用户只能向该账户存款,不能再从中取款。
现在用状态模式来实现状态的转换问题,用户只需要执行简单的存款和取款操作,系统根据余额数量自动转换到相应的状态。
二.设计类图
三.全部类代码
1.环境类Account(银行账户类)
public class Account {
private AccountState state;
private String owner;
public Account(String owner, double init){
this.owner = owner;
System.out.println(this.owner + "开户,初始账户为" + init);
System.out.println("----------------------");
this.state = new GreenState(init, this);
}
public void setState(AccountState state){
this.state = state;
}
public void deposit(double amount){
state.deposit(amount);
}
public String getOwner(){
return this.owner;
}
public void withdraw(double amount){
state.withdraw(amount);
}
}
Account类是一个环境类,它是拥有状态的对象,他维持了一个抽象状态的引用,并且可以通过其setState()方法设置状态。在Account类的构造函数中定义了初始状态,在其业务方法中可以调用定义在状态类中的业务方法。
2.抽象状态类AccountState(账户状态类)
public abstract class AccountState {
protected Account acc;
protected double balance;
public abstract void stateCheck();
public void deposit