首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >摆脱if-then-else的C++设计模式

摆脱if-then-else的C++设计模式
EN

Stack Overflow用户
提问于 2010-10-17 11:44:05
回答 8查看 2.3K关注 0票数 2

我有下面这段代码:

代码语言:javascript
复制
if (book.type == A)  do_something();
else if (book.type == B) do_something_else();
....
else do so_some_default_thing.

每当有新的图书类型或删除图书类型时,都需要修改此代码。我知道我可以使用枚举和switch语句。有没有一种设计模式可以去掉这个if-then-else?

与使用switch语句相比,这种模式的优点是什么?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-10-17 11:46:11

您可以为每种类型的图书创建不同的类。每个类都可以实现相同的接口,并重载一个方法来执行必要的类特定逻辑。

我并不是说这一定更好,但这是一种选择。

票数 6
EN

Stack Overflow用户

发布于 2010-10-17 12:14:31

正如其他人所指出的那样,虚拟函数可能应该是您的首选。

如果由于某些原因,这对您的设计不是很有意义/效果很好,另一种可能是使用一个使用book.type的std::map作为键和指向函数(或函数等)的指针。作为关联值,因此您只需查找要对特定类型执行的操作(这几乎就是许多OO语言在幕后实现其等效虚函数的数量)。

票数 6
EN

Stack Overflow用户

发布于 2010-10-17 11:47:10

每种不同类型的图书都是父类的不同子类,并且每个类都使用相同的接口实现一个方法do_some_action()。当您希望发生操作时,可以调用该方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3951931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档