四.案例分析(Example

1、场景

银行账户根据余额可分为三种状态 RedState SilverState GoldState ,这些状态分别代表了透支帐户 (overdrawn accounts) ,新开帐户 (starter accounts), 标准帐户 (accounts in good standing).. 如下图所示 <?XML:NAMESPACE PREFIX = O />

 

RedState :账号余额在范围【 0.0,1000.0 】表示处于处于 SilverState 。否则转换为其他状态

if (balance < lowerLimit)

{

    account.State = new RedState (this );

}

else if (balance > upperLimit)

{

    account.State = new GoldState (this );

}

 

SilverState 账号余额在范围【 -100.0,0 】表示处于处于 RedState 。否则转换为其他状态

if (balance > upperLimit)

{

    account.State = new SilverState (this );

}

 

GoldState 账号余额在范围【 1000.0,10000000.0 】表示处于处于 GoldState 。否则转换为其他状态

if (balance < 0.0)

{

    account.State = new RedState (this );

}

else if (balance < lowerLimit)

{

    account.State = new SilverState (this );

}

2、代码

请参看:http://www.cnblogs.com/ywqu/archive/2010/01/26/1656418.html

3、程序运行结果

五、总结(Summary

状态模式( State Pattern ),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。当一个对象行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。