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

use*_*536 2 c++ design-patterns if-statement

我有以下代码:

if (book.type == A)  do_something();
else if (book.type == B) do_something_else();
....
else do so_some_default_thing.
Run Code Online (Sandbox Code Playgroud)

只要有新书类型或删除书籍类型,就需要修改此代码.我知道我可以使用枚举并使用switch语句.是否有一种设计模式可以删除if-then-else?

与使用switch语句相比,这种模式有哪些优点?

Kal*_*see 6

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

我不是说这一定更好,但它是一种选择.


Jer*_*fin 6

正如其他人所指出的,虚拟功能应该是您的首选.

如果由于某种原因,这对你的设计没有意义/工作,另一种可能性是std::map使用book.type作为键和指向函数(或函子等)的指针作为关联值,所以你只需要查找特定类型的动作(这几乎就是有多少OO语言实现它们相当于虚拟功能的内幕).