表驱动与工厂模式

本文介绍了如何使用表驱动方法避免复杂的逻辑判断,以减少代码的复杂度。通过工厂模式的例子,讨论了如何利用函数指针、仿函数以及指向成员函数的指针来实现表驱动。尽管尝试使用成员函数指针失败,但表驱动的思想仍然为提高代码效率和整洁度提供了有价值的思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于表驱动

        首次接触表驱动,还是在毕业不久之后。当时某部门经理给我们讲解重构,即《重构:改善既有代码的设计》一书中简化条件表达式部分,关于if语句的处理,将其替换为多态形式,例如说工厂模式。但是即使替换为工厂,switch或者if的判断依旧不能去除,那么有什么办法解决这个问题呢?

        当时我还在研究STL源码,想到了traits编程技术,可以在编译期解决if的判断问题(虽然有这个想法,但是一直没有实现成功)。各路大牛提出了不同的见解,大家基本上都同意一条:使用“表”来解决。当时见识尚浅,不懂具体说的是什么意思,直到我知道了“表驱动”。

        “表驱动”来自于《代码大全》,此书在我的定义里,为一本软件工程类的书。表驱动作为单独一章出现,并且在序言中推荐为初级程序员首读章节,可见其重要性。

        首先,为什么要有表驱动呢?表驱动的目的是避免逻辑语句(if和case),而使用表来查找判断信息。那么为什么要这么做呢?《代码大全》第5.2章节提到,软件的首要技术使命:管理复杂度。复杂度可以靠圈复杂度(一个函数可执行路径的数目)来判断,具体要涉及到图论等等方方面面,不再展开说明。那么表驱动的使用就可以大幅度的降低复杂度。

        其次,表驱动是什么?任何可以用逻辑语句来选择的事物,都可以通过查表来选择。例如说:情况1,选择事物1;情况2,选择事物2等等,存储在表中就是如下格式:

情况

事物

1

1

2

2

        那么,凡是用if和case来选择事物的语句,都可以替换为以下形式:

        Table[选择的情况i];

        这样就可以直接通过首地址+偏移量直接获取对应的内容,取消了判断逻辑。假设要选择第n个事物,那么就是首地址+n,直接得到了第n个事物。如果用正常的判断逻辑,那么可能需要判断n次才可以得到第n个事物。

        其他具体内容,大家可以自己去百度一下~

 

工厂模式

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值