前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 多层条件修正

Java 多层条件修正

作者头像
zucchiniy
发布2019-10-30 18:48:57
9750
发布2019-10-30 18:48:57
举报
文章被收录于专栏:洞明学问

今天看了一下阿里的 Java 的开发手册,看到了个有意思的问题,代码里的多层嵌套的问题,文档中提供的解决方案是用 卫语句策略模式状态模式 这三种方案解决,看了一下具体的实现:

卫语句:

卫语句是指的将多层嵌套拆分成不同的方法的一种形式。但是卫语句并不能解决现在提到的这个问题,只是可以解决多层嵌套本身不易理解的情况。

代码语言:javascript
复制
if (condition)
    return obj;

策略模式

策略模式的本质是分离算法,在具体的上下文中选择实现。

比如我们有三个同样的内容,在不同的情况下进行触发,如果每种情况的具体操作不同,但是比较类似,比如两数相加、两数相减,这就可以实现为策略模式,当我们希望相加时,把策略的对象传给调用的方法,就能执行实现中的加的方法了。

状态模式:

状态模式的本身是设置状态,当状态改变时,改变相应的实现。

比如我有一个画圆的操作,从 x 轴开始顺时针画圆,当 y 轴为 0 的时候, x 为零,y 为负值的时候,和 x 为零,y 为正值的时候,是四个不同的画笔完成的,而每次绘制,都是在四个条件中进行自动切换,而不是我们希望用什么状态去切换。

区别

状态模式和策略模式的 UML 图是一样的,但是意图却完全不一样,策略模式是让用户指定更换的策略算法,而状态模式是状态在满足一定条件下的自动更换,用户无法指定状态,最多只能设置初始状态。

所以状态模式更像是触发模式,当其一个状态改变的时候,其执行的方法也就改变了,而策略模式是主动去修改当前的策略,而其中的算法或者方法是可以替代的,比如计算中的四则运算,可以当成同一个类别,但是当意图改变的时候,调用的方法也就改变了。也就是策略模式,而状态模式更像是一个选择,比如递减的数列,当值递减到某一个范围之后,就不再有递减的状态了。

使用的话,状态模式更适合替代 while 循环,当循环结束时,状态也就要发生改变。而且策略模式更适合替代 if-else 条件,条件的不同,也就代码了使用不同的策略执行。作。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 卫语句:
  • 策略模式
  • 状态模式:
  • 区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档