查表法和switch的能力有很大重合,两者都可通过“索引”找到指定元素,但它们有哪些区别呢?在不同场景下我们应如何选择?
介绍
switch
switch使用广泛,在Go设计模式(7)-工厂模式中便有体现。
1 | /** |
查表法
“查表法”将事先确定好的内容存放到map中,根据需要从map中获取。Go设计模式(20)-策略模式中使用”查表法“进行实现。
1 | /** |
区别
之所以能发现两者区别,是因为有块逻辑最初我用switch实现,但后面有同学改为查表法。当时没有察觉有什么区别就同意了。最近需求更改需要修改这块逻辑,发现使用查表法有问题,switch是更好的方案。
大家之所以喜欢用查表法,应该是感觉能够去掉if-else、switch。
但switch有查表法没有的能力,它有default。
1 | switch var1 { |
举个例子方便大家理解:
- 如果有3个命令,对应的函数分别是funcA、funcB、funcC,这种情况下,使用switch或查表法都可以。
- 如果有10个命令,命令A和命令B对应的函数为funcA、funcB,其它8个命令对应funcC,这种情况下,使用查表法就很被动,虽然能够实现,但很丑。
所有如果有大量case指向同一个逻辑,推荐使用switch,否则两者皆可。
总结
如果对事物没有深入的理解,遇到选择的时候会不知所措。所以一定要多经历、多思考、多总结。