if else 语句 的优化

来源:互联网 发布:iptables开放3306端口 编辑:程序博客网 时间:2024/05/14 11:19
请教诸位这么一个问题,一个假象的银行帐户管理系统中:

* 帐户(Account)分为普通帐户,VIP帐户和信用卡帐户三种.

* 每个帐户都可以执行取钱,存钱,注销三种操作

* 关于取钱操作的细节:
      普通帐户每次取钱限额为1000元,不能透支
      VIP帐户每次取钱限额为3000元,不能透支
      信用卡帐户每次取钱限额为3000元,可以透支

* 另外每个帐户有四种可能的状态:新建、正常、冻结、挂失

* 帐号处于不同状态时对于上面提到的三种操作会产生影响:
      新建状态时不能执行注销操作
      挂失状态时不能执行存钱、取钱操作
      冻结状态时不能执行存钱、取钱、注销操作

这是简单的需求,在设计时,

* 我将帐户设置为抽象类(Account),普通帐户,VIP帐户和信用卡帐户为其子类

* 使用状态模式管理帐户的四种状态,具体做法为:建立接口AccountState,其中包含取钱,存钱,注销三个方法,然后给出四个实现类,分别对应新建、正常、冻结、挂失四种状态。在Accout中保持一个对状态的引用

问题:在实现状态模式中的三个方法的时候出现了问题,以取钱为例,显然取钱时要判断当前帐号的类别,这样一来难免引入if判断,二来需要在状态类中依赖Account子类,感觉并不好,请教好的解决思路。

(为了避免代码冗余,希望能用策略模式实现取钱,存钱等方法)
原创粉丝点击