else 策略模式去掉if_如何使用状态模式和策略模式消除if...else

请教诸位这么一个问题,一个假象的银行帐户管理系统中:

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

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

* 关于取钱操作的细节:

普通帐户每次取钱限额为1000元,不能透支

VIP帐户每次取钱限额为3000元,不能透支

信用卡帐户每次取钱限额为3000元,可以透支

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

* 帐号处于不同状态时对于上面提到的三种操作会产生影响:

新建状态时不能执行注销操作

挂失状态时不能执行存钱、取钱操作

冻结状态时不能执行存钱、取钱、注销操作

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值