如何减少代码中的分支语句
2013-11-16 18:46
288 查看
代码中往往存在很多的分支语句:判断+执行;大量的分支语句让代码看上去很丑陋,而且容易增加代码复杂度。
所以我觉得减少代码的分支语句或者隐藏分支语句是一件很有必要的事情,能够让代码变得更加清晰易读。
减少分支语句,在实际的编程中遇到了一种比较好的方式——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语句的使用
- 如何减少可执行文件的代码
- 如何减少代码的量
- Git(GitHub) 003 如何 clone 非 master 分支的代码 — 切换到指定 branch分支 或者 tag版本
- 如何减少代码的量
- CPLD/FPGA/Verilog_如何写代码减少逻辑单元的使用数量
- sonar:一个项目多个分支,如何区分统计代码检查结果
- 如何用git将代码推送到coding,新建分支命令与推送
- git如何merge(合并)代码到另外的分支
- Git 如何 clone 非 master 分支的代码
- git中如何将已commit的代码commit到其它分支
- 如何使用SmartGit快速上传下载新建分支修改代码
- 在阿里,我们如何管理代码分支?
- 如何把代码中的SQL语句改成可以直接在数据库中运行的SQL语句
- 如何有效的减少重复的代码
- git----------如何创建develop分支和工作流,以及如何将develop上的代码合并到master分支上
- 编写高效代码(5) 尽量减少分支