我有下面这段代码:
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语句相比,这种模式的优点是什么?
发布于 2010-10-17 11:46:11
您可以为每种类型的图书创建不同的类。每个类都可以实现相同的接口,并重载一个方法来执行必要的类特定逻辑。
我并不是说这一定更好,但这是一种选择。
发布于 2010-10-17 12:14:31
正如其他人所指出的那样,虚拟函数可能应该是您的首选。
如果由于某些原因,这对您的设计不是很有意义/效果很好,另一种可能是使用一个使用book.type的std::map作为键和指向函数(或函数等)的指针。作为关联值,因此您只需查找要对特定类型执行的操作(这几乎就是许多OO语言在幕后实现其等效虚函数的数量)。
发布于 2010-10-17 11:47:10
每种不同类型的图书都是父类的不同子类,并且每个类都使用相同的接口实现一个方法do_some_action()。当您希望发生操作时,可以调用该方法。
https://stackoverflow.com/questions/3951931
复制相似问题