如何解决代码中条件语句多层嵌套问题

背景:

审视近期解析程序开发代码,发现有部分if条件语句的多层嵌套,嵌套层次达到三层及以上时,这样的代码在维护时不够方便,遂思考如何解决这个问题,下面给出学习思考的几种解决方案。

内容:

1.使用卫语句
卫语句核心思想是将分支条件单独检查,并在检查结果为真时立即返回。
从实际代码中感受卫语句(右侧图)的效果:
在这里插入图片描述
总结两点卫语句使用要点:
对于复杂的判断逻辑,选择使用卫语句时,建议加上注释。
要特别注重卫语句的先后顺序,当条件非常复杂时,要特别注意卫语句的中断是否符合期望的逻辑。

2.使用状态模式
状态模式的主要角色包括:环境上下文、抽象状态、具体状态,结构图如下:
在这里插入图片描述
环境上下文主要定义了客户端需要的接口,内部维护一个当前状态,并可以负责具体状态的切换。抽象状态用以封装环境对象中的特定状态所对应的行为,可以有一个或多个行为。具体状态负责实现抽象状态所对应的行为,并且可以在需要的情况下进行状态切换。

当多层嵌套条件语句能提取出满足对象状态、对象行为这两个要素,并且行为取决于它的状态时,可以考虑采用状态模式重构代码。

3.状态模式可以解决多层条件嵌套问题,运用策略模式、责任链模式同样可以解决

状态模式强调的是一个对象内在状态的改变,而责任链模式强调的是外部节点对象间的改变。从代码实现上来看,状态模式的各个状态对象知道自己要进入的下一个状态对象,而责任链模式并不清楚其下一个节点处理对象,因为链式组装由客户端负责。

策略模式统筹多种算法行为,任意择其一都能满足接口需求,彼此之间是独立的,用户可自行更换策略算法;而状态模式的各个状态间存在相互关系,彼此之间在一定条件下可以相互切换状态。

猜你喜欢

转载自blog.csdn.net/csdnklsdm/article/details/121361632