![]() |
1
8
我会的 伊布克 要实现每种方法:
因为你的选择对我来说太混乱了,你会以许多混乱的界面结束。在其他方面,你可以检查 Visitor pattern 可以在这里申请。 |
![]() |
2
2
一个解决方案可以是使用纯虚拟方法保留您的基本接口,但是让您的实际实现继承自为虚拟方法提供默认实现的中间类。 中间类的一个常见实现是在每个方法中抛出某种“MethodNotImplemented”异常,这样类的用户就可以逐个捕获这些异常。 在这种情况下,对于调用不存在的方法不会是“例外”的情况来说,有点贵,也有方法使这些方法为空或返回默认值,如Simone所示。 |
![]() |
3
2
我想你不需要走极端,只要选择中间路线。 只有一个接口是不好的 Interface Segregation Principle (ISP) 另一方面,拥有这么多接口也会破坏代码。我会留下一本核心的IBook,然后再考虑其他的。例如,IPrintable和IConvertible(用于pdf转换)可以放在一个接口中。也许我和伊斯宾杰也会走到一起。 |
![]() |
4
2
我觉得你应该区分一下 有 一个ISBN,并实现一个查询ISBN的接口(在本例中是IBook)。 作为“书”定义的一部分,你没有理由不说一本书是“有可能发现它是否有ISBN,如果有,又是什么”的东西。 如果您不喜欢返回空值来表示“无”,那就足够了。在某些域中,空字符串是一个有效值,因此这甚至是不可能的。你可以:
或:
或类似的。
否则,你会发现自己
如果这些事情看起来是必要的,你也许可以使用策略。定义
|
![]() |
5
1
另一个解决方案是保留接口,但对可以为空的返回值使用boost::optional。
|
![]() |
6
1
对于每本书,都可以有一个指向基本接口singleton对象的指针容器,比如
|
![]() |
7
1
有两个只是轻微的(从来没有如此轻微!)相关问题:
其他人则为每一个问题提供了解决方案。也就是说,对于第一个接口,不要使用everything接口,不要使用每个接口的单个方法,而是尝试对那里的层次结构进行建模。关于后者,
我只想强调,在我写这篇文章的时候,从现在的答案中可能看不出来,它们确实是两个独立的问题。
关于风格(清晰度的另一个方面),这是什么
在C++中没有意义,只是写
干杯。, |
![]() |
Vedant · 如何解决python啦啦队长问题?[已关闭] 2 年前 |
![]() |
cobby · 在战略模式中使用工厂模式? 2 年前 |
![]() |
Nobody · Java中带while循环的三角形模式 2 年前 |
![]() |
Eduard Stefanescu · 如何在层之间传输异常? 6 年前 |
![]() |
D. Schreier Talha Noyon · 对于目录中的每个类 6 年前 |
![]() |
Tanvi Jaywant · 如何重载类 6 年前 |