【发布时间】:2011-08-05 12:35:43
【问题描述】:
我在这里有以下两难境地:我有几个类,比如说 A、B、C 和 D。A 有一个公共接口,并且与 B 有一个 has-a 关系(就像 A 有一个类型的成员变量B)A的方法之一是返回这个B对象,B只是一个暴露一些方法的类,C是另一个暴露其他方法的类,D是一个单例对象。 D 的公共接口具有对 C 类对象的引用(如果您喜欢更多的指针)。
所以,很明显,当我想在这一步绘制关系图时,我会在 A 和 B 之间建立一个关系,而 C 会放在图上,而与其他两个之间没有可见的关系。所以,这是基于头文件(.h),其中包含 A、B、C 类的声明。我现在对 D 有点困惑。
另一端:
- A 和 B 的实现(在 .cpp 文件中)都严重依赖于从类 C 创建的对象(不,C 不是标准的东西,例如列表、字符串、队列,而是我的应用程序中另一个有意义的类)。
- A 和 B 的实现都使用带有本地 C 对象的 D 单例。
这是我的问题:
- 我应该在类图上放置 A、B、C 和 D 之间的什么关系,不包括我已经确定的关系(A 有 - 一个 B)?我对单例 D 与 C 类的关系特别感兴趣。
- 对于这种情况,普遍接受的方法是什么(当接口没有对象之间的关系时,因为没有关系,但在实现中它们被大量使用)?
- 如果我根据 Java 而不是 C++ 提出相同的问题,会不会有区别(因为在 java 中,与类相关的所有内容都在一个文件中,因此更容易查看类方法实际使用的内容,而在 C++ 中,您通常只看到标题)。
非常感谢您的指导。
【问题讨论】:
-
如果您还没有使用前 2 段中的描述绘制您所知道的内容。然后,当您拥有它时,将其添加到您的问题中,这将有助于我们理解这些关系,即使图表不完整。重要的是先画出你所知道的。
-
混淆源于试图将单例融入原本易于管理的设计中。他们不为任何人所拥有,为任何人所接受,他们在关系图上跺着脚,将其简化为意大利面条。大约 99% 的时间应该避免全局对象;当你确实需要一个时,它几乎肯定也不应该是一个单例,除非你有一些非常奇怪的要求。
-
关于单身问题:jalf.dk/blog/2010/03/… -- 希望对您有所帮助:)