如何减少代码中的分支语句
2012-08-08 18:10
260 查看
如何减少代码中的分支语句
代码中往往存在很多的分支语句:判断+执行;大量的分支语句让代码看上去很丑陋,而且容易增加代码复杂度。
所以我觉得减少代码的分支语句或者隐藏分支语句是一件很有必要的事情,能够让代码变得更加清晰易读。
减少分支语句,在实际的编程中遇到了一种比较好的方式——Command模式减少分支语句。
Command模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化。
所以可以将一系列请求都封装成对象,形成一个请求集合。
当需要执行一个请求的时候直接去这个集合中查找到对应的请求对象,然后执行对象的Command。
下面以一个具体的例子看一下这个过程:
结构如下:
1 命令原型
2 命令注册
3 命令执行
4 总结
这是存在比较多的条件判断情况下,以此方式进行存在一个问题是:增加类的数量以及其他额外的开销。
但其实判断仍然是存在的,只是我们将其隐藏起来而已,很多时候复杂的逻辑流程必然存在无法避免,
但是却可以将复杂的事情简单化。软件中的复杂度是必然存在的,如何化复杂为简单,真是学问很大啊!
代码中往往存在很多的分支语句:判断+执行;大量的分支语句让代码看上去很丑陋,而且容易增加代码复杂度。
所以我觉得减少代码的分支语句或者隐藏分支语句是一件很有必要的事情,能够让代码变得更加清晰易读。
减少分支语句,在实际的编程中遇到了一种比较好的方式——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 总结
这是存在比较多的条件判断情况下,以此方式进行存在一个问题是:增加类的数量以及其他额外的开销。
但其实判断仍然是存在的,只是我们将其隐藏起来而已,很多时候复杂的逻辑流程必然存在无法避免,
但是却可以将复杂的事情简单化。软件中的复杂度是必然存在的,如何化复杂为简单,真是学问很大啊!
相关文章推荐
- 如何减少代码中的分支语句
- 如何减少代码中的分支语句
- 如何在代码中减少if else语句的使用
- 使用case语句来改善verilog代码中if……else分支过多的问题
- 如何减少代码的量
- IDEA如何将git分支代码合并到master
- 如何在c#代码中执行带GO语句的SQL文件
- 分支语句 (if) 练习 Java代码
- 自制编程语言CXScript(三) 如何实现if语句、else语句并实现分支跳转
- gitlab如何实现代码分支管理(只有思路没有解决方案)
- 写代码时如何减少Bug
- 在阿里,我们如何管理代码分支?
- 【码云周刊第 12 期】走过微软20年,埋头并发编程15年,如何减少代码的认知负荷?
- 如何有效的减少重复的代码
- MyBatis代码实例系列-09:初步整合Spring + Spring MVC框架之后,如何打印MyBatis的SQL语句
- 如何克隆git上的某一个分支的代码
- 如何减少基于DataSet框架的代码输入量(一)
- CPLD/FPGA/Verilog_如何写代码减少逻辑单元的使用数量
- 如何在c#代码中执行带GO语句的SQL文件
- 代码日常--如何在SQL查询语句中添加判断逻辑