if-else重构与设计模式

最近学习的时候遇到了一些问题,《阿里代码规范》提到了大段的if-else可以用状态模式代替,而《java设计模式》一书中说if-else可以用策略模式代替。

有点不解,所以在深入了解后,决定写一篇博客记录一下。

翻了一下gof的《设计模式》发现两者的结构几乎一模一样。。。

状态模式适用性:

1、一个对象的香味取决于他的状态,并且他必须在运行时刻根据状态改变他的行为。

2、一个操作中包含庞大的多分支的条件语句,且这些分支依赖于改对象的状态。

策略模式适用性:

1、许多相关的类仅仅是行为有异。

2、需要使用一个算法的不同变体。

3、算法使用客户不应该知道的数据。

4、一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的分支条件移入他们各自的strategy类中代替这些条件语句。


两者适用场景非常相似,最大的差别是我们赋予了状态模式的类,“状态“这一抽象属性。

这导致了

1、策略模式常用于单个操作,状态模式应用于多个操作。

2、策略模式之间不存在状态转换,状态模式之间可能存在状态的转换。


要说到重构if-else其实他们都是可行的,只是有不同的使用场景罢了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值