处理对象的多种状态及其相互转换—状态模式(一)
图1 H2O的三种状态(未考虑临界点)
1. 银行系统中的账户类设计
|
图2 银行账户状态图
NormalState表示正常状态,
OverdraftState表示透支状态,
RestrictedState表示受限状态,在这三种状态 下账户对象拥有不同的行为,方法deposit()用于存款,withdraw()用于取款,computeInterest()用于计算利 息,stateCheck()用于在每一次执行存款和取款操作后根据余额来判断是否要进行状态转换并实现状态转换,相同的方法在不同的状态中可能会有不同 的实现。为了实现不同状态下对象的各种行为以及对象状态之间的相互转换,Sunny软件公司开发人员设计了一个较为庞大的账户类Account,其中部分 代码如下所示:
-
class
Account 账户类Account{ // -
private String //状态state; -
private int balance; //余额 -
...... -
-
//存款操作 -
public void deposit() { -
//存款 -
stateCheck(); -
} -
-
//取款操作 -
public void withdraw() { -
if (state.equalsIgnoreCase( "NormalState")
-
|| state.equalsIgnoreCase( " )){ -
//取款 -
stateCheck(); -
} -
else { -
//取款受限 -
} -
} -
-
//计算利息操作 -
public void computeInterest() { -
if(state.equalsIgnoreCase("OverdraftState")
-
|| state.equalsIgnoreCase( " )){ -
//计算利息 -
} -
} -
-
//状态检查和转换操作 -
public void stateCheck() { -
if (balance 0)>= { -
state = "NormalState"; -
} -
else if (balance 2000> - && 0)balance < { -
state = "OverdraftState"; -
} -
else if (balance 2000)== - { -
state = "RestrictedState"; -
} -
else if (balance 2000)< - { -
//操作受限 -
} -
} -
...... - }
【作者:刘伟 http://blog.csdn.net/lovelion】