如何减少代码中的分支语句
2012-08-08 11:34
411 查看
如何减少代码中的分支语句
代码中往往存在很多的分支语句:判断+执行;大量的分支语句让代码看上去很丑陋,而且容易增加代码复杂度。
所以我觉得减少代码的分支语句或者隐藏分支语句是一件很有必要的事情,能够让代码变得更加清晰易读。
减少分支语句,在实际的编程中遇到了一种比较好的方式——Command模式减少分支语句。
Command模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化。
所以可以将一系列请求都封装成对象,形成一个请求集合。
当需要执行一个请求的时候直接去这个集合中查找到对应的请求对象,然后执行对象的Command。
下面以一个具体的例子看一下这个过程:
结构如下:
[b]1 命令原型[/b]
[b]2 命令注册[/b]
[b]3 命令执行[/b]
[b]4 总结[/b]
这是存在比较多的条件判断情况下,以此方式进行存在一个问题是:增加类的数量以及其他额外的开销。
但其实判断仍然是存在的,只是我们将其隐藏起来而已,很多时候复杂的逻辑流程必然存在无法避免,
但是却可以将复杂的事情简单化。软件中的复杂度是必然存在的,如何化复杂为简单,真是学问很大啊!
代码中往往存在很多的分支语句:判断+执行;大量的分支语句让代码看上去很丑陋,而且容易增加代码复杂度。
所以我觉得减少代码的分支语句或者隐藏分支语句是一件很有必要的事情,能够让代码变得更加清晰易读。
减少分支语句,在实际的编程中遇到了一种比较好的方式——Command模式减少分支语句。
Command模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化。
所以可以将一系列请求都封装成对象,形成一个请求集合。
当需要执行一个请求的时候直接去这个集合中查找到对应的请求对象,然后执行对象的Command。
下面以一个具体的例子看一下这个过程:
结构如下:
[b]1 命令原型[/b]
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(); } } ……不一一列出
[b]2 命令注册[/b]
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)); } }
[b]3 命令执行[/b]
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); }
[b]4 总结[/b]
这是存在比较多的条件判断情况下,以此方式进行存在一个问题是:增加类的数量以及其他额外的开销。
但其实判断仍然是存在的,只是我们将其隐藏起来而已,很多时候复杂的逻辑流程必然存在无法避免,
但是却可以将复杂的事情简单化。软件中的复杂度是必然存在的,如何化复杂为简单,真是学问很大啊!
相关文章推荐
- 如何减少代码中的分支语句
- 如何减少代码中的分支语句
- 如何在代码中减少if else语句的使用
- 如何才能减少代码的错误
- 如何在c#代码中执行带GO语句的SQL文件
- 看Black Rock 是如何使用代码分支的
- 命令模式:如何用TortoiseSVN,将主干更新的代码合并到本地分支
- 程序员如何减少代码的BUG量
- MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API
- 新兵易学,老兵易用----C++(C++11的学习整理---如何减少代码量,加强代码的可读性)
- Java基础学习总结(81)——如何尽可能的减少Java代码中bug
- 在阿里,我们如何管理代码分支?
- 学习FPGA verilog的心得--编程技巧--如何写代码减少逻辑单元的使用数量
- 编写高效代码(11) 尽量减少分支
- 如何使用js减少页面大量重复(js事件)语句
- 在编写PL/SQL代码中使用SELECT语句时如何避免例外发生
- Java基础学习总结(81)——如何尽可能的减少Java代码中bug
- 连载:编写高效代码(11) 尽量减少分支
- MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API
- 在阿里,我们如何管理代码分支?