好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

如何减少代码中的分支语句

如何减少代码中的分支语句

  如何减少代码中的分支语句

  代码中往往存在很多的分支语句:判断+执行;大量的分支语句让代码看上去很丑陋,而且容易增加代码复杂度。

所以我觉得减少代码的分支语句或者隐藏分支语句是一件很有必要的事情,能够让代码变得更加清晰易读。

减少分支语句,在实际的编程中遇到了一种比较好的方式——Command模式减少分支语句。

Command模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化。

   所以可以将一系列请求都封装成对象,形成一个请求集合。

当需要执行一个请求的时候直接去这个集合中查找到对应的请求对象,然后执行对象的Command。

    

下面以一个具体的例子看一下这个过程:

结构如下:

    

1  命令原型

  interface   ScenceCommand {
      void   doExecute();
}
  //  CallHang命令 
 class  CallHangScenceCommand  implements   ScenceCommand {
      private   TelEventTreater mTreater;

      public   CallHangScenceCommand(TelEventTreater treater) {
        mTreater  =  treater;
    }

    @Override
      public   void   doExecute() {
        mTreater.doHangCall();
    }
}
  //  CallAnswer命令 
 class  CallAnswerScenceCommand  implements   ScenceCommand {
      private   TelEventTreater mTreater;

      public   CallAnswerScenceCommand(TelEventTreater treater) {
        mTreater  =  treater;
    }

    @Override
      public   void   doExecute() {
        mTreater.doAnswerCall();
    }
}
……不一一列出  

2  命令注册

  abstract   class   ScenceCommandRegister {
    //  存储所有的命令请求集合 
     private  HashMap<String, ScenceCommand>  mScenceCmdSet;

      public   ScenceCommandRegister() {
        mScenceCmdSet  =  new  HashMap<String, ScenceCommand> ();
    }
      //  命令请求注册 
     public   void   registerCommand(String name, ScenceCommand command) {
        mScenceCmdSet.put(name, command);
    }
      //  命令请求查询 
     public   ScenceCommand getCommand(String name) {
                  return   mScenceCmdSet.get(name);
    }
}

  class  CallScenceCommandRegiser  extends   ScenceCommandRegister {
      public   CallScenceCommandRegiser(TelEventTreater treater) {
          super  ();
      //注册所有命令      registerCommand(CallInputCommandMatch.CALL_DEFAULT, new CallDefaultScenceCommand(treater)); registerCommand(CallInputCommandMatch.CALL_HANG, new CallHangScenceCommand(treater)); registerCommand(CallInputCommandMatch.CALL_ANSWER, new CallAnswerScenceCommand(treater)); registerCommand(CallInputCommandMatch.CALL_REPLY, new CallReplyScenceCommand(treater)); registerCommand(CallInputCommandMatch.CALL_MUTE, new CallMuteScenceCommand(treater));    registerCommand(CallInputCommandMatch.CALL_COMPLETE, new CallCompleteScenceCommand(treater)); registerCommand(CallInputCommandMatch.CALL_NORSP, new CallNoRspScenceCommand(treater)); } }

3  命令执行

  private   static   ScenceCommandRegister mScenceRegister;
@Override
  public   void   onResult(Result res) {
  String resultStr  =  res.Get_RawText();
    do   {
       //  操作请求 
     String cmdStr =  mCommandMatch.matchInputCommand(resultStr);
       if  (cmdStr ==  null  ) {
         break  ;
     }
      //  命令请求 
    ScenceCommand scenceCmd =  mScenceRegister.getCommand(cmdStr);
      if  (scenceCmd ==  null  ) {
        break  ;
    }
      //  命令执行 
     scenceCmd.doExecute();
  }   while  ( false  );
}  

4 总结

  这是存在比较多的条件判断情况下,以此方式进行存在一个问题是:增加类的数量以及其他额外的开销。

但其实判断仍然是存在的,只是我们将其隐藏起来而已,很多时候复杂的逻辑流程必然存在无法避免,

但是却可以将复杂的事情简单化。软件中的复杂度是必然存在的,如何化复杂为简单,真是学问很大啊!

 

分类:  软件方法 ,  设计模式

标签:  Framework 设计模式

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于如何减少代码中的分支语句的详细内容...

  阅读:34次