在开发复杂的业务逻辑时避免不了出现大量的业务判断,这时就会出现if()…else if()……else{};这其中可能不止出现一个else if();可能出现3,4,5…多个else if()的结构,这样会造成什么问题呢?下面通过一段未经处理的逻辑看一下这样写的问题在哪。

    1. //这是一个type类型
    2. private int type = 0;
    3. /**
    4. *此方法根据type类型的不同处理不同的业务(此处作为测试代码简单带过)
    5. *但是每次处理完业务后需在else语句做一个其他业务的处理
    6. */
    7. public void getType() {
    8. if (type == 0) {
    9. } else {
    10. if (type == 1) {
    11. } else {
    12. if (type == 2) {
    13. } else {
    14. //若在此处在次判断type的值,这个嵌套会更加进行
    15. setType();
    16. }
    17. }
    18. }
    19. }

    这样所造成的问题十分明显,若此逻辑不是我自己写的我需看完整个方法才能了解这是一个怎样的业务。代码过于冗长,可读性及差。如何解决这种问题呢?

    使用设计模式state模式(状态模式),根据不同的状态来处理不同的业务(此处不做详细解释)
    使用卫语句
    如何使用卫语句呢?请看下面事例代码:

    1. public void getTypeNew() {
    2. /**
    3. *当type的值满足条件后,直接return掉,将这个方法终止。不再继续进行了。
    4. *若所有条件均不满足,则执行setType();这个最终else的业务处理
    5. */
    6. if (type == 0) {
    7. return;
    8. }
    9. if (type == 1) {
    10. return;
    11. }
    12. if (type == 2) {
    13. return;
    14. }
    15. setType();
    16. }

    当使用卫语句之后,代码的逻辑十分简单,可读性很高。基本一目了然。而且减少了冗长的语句嵌套。