如何减少代码中的分支语句
来源:互联网 发布:dsdt提取 mac 编辑:程序博客网 时间:2024/06/07 20:35
代码中往往存在很多的分支语句:判断+执行;大量的分支语句让代码看上去很丑陋,而且容易增加代码复杂度。
所以我觉得减少代码的分支语句或者隐藏分支语句是一件很有必要的事情,能够让代码变得更加清晰易读。
减少分支语句,在实际的编程中遇到了一种比较好的方式——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;@Overridepublic 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 总结
这是存在比较多的条件判断情况下,以此方式进行存在一个问题是:增加类的数量以及其他额外的开销。
但其实判断仍然是存在的,只是我们将其隐藏起来而已,很多时候复杂的逻辑流程必然存在无法避免,
但是却可以将复杂的事情简单化。软件中的复杂度是必然存在的,如何化复杂为简单,真是学问很大啊!
- 如何减少代码中的分支语句
- 如何减少代码中的switch块?
- 如何在代码中减少if else语句的使用
- 编写高效代码(11) 尽量减少分支
- 编写高效代码(5) 尽量减少分支
- 减少GPU应用中的分支方法[1]
- Oracle中的分支语句
- 如何减少可执行文件的代码
- 如何减少代码的量
- 减少模板中的代码膨胀
- 如何减少项目中的谎言
- Oracle中的条件分支语句
- groovy中的循环/分支语句
- 减少分支预测,让代码并行度更高
- 连载:编写高效代码(11) 尽量减少分支
- 如何编写C++以减少CPU分支预测错误?
- flex如何减少代码量减少内存消耗
- 如何有效的减少重复的代码
- HDU 3242 两个字符串的相加和相减
- 不能将参数 2 从“const char *”转换为“LPCWSTR” vs 2010解决
- UVA 701 - The Archeologists' Dilemma(数论)
- MFC ListBox控件使用方法总结
- Linux性能评测工具之一:gprof篇
- 如何减少代码中的分支语句
- node.js 连接mysql数据库 完美教程
- 碰巧解决
- 基于正则表达式的轻量提示插件--InputNotes文本框输入提示插件
- strust2 AOP学习笔记
- LeetCode Partition List 按值分段链表 系统分析
- 数据库安全警示录1之drop user and drop tablespace规范
- 双缓冲(Double Buffer)原理和使用
- JAVA中String、StringBuffer、StringBuilder的区别