【发布时间】:2018-11-12 16:33:44
【问题描述】:
我对 C++ 处理这种情况的方式有点陌生,所以我决定不立即使用单例模式,而是问这个问题,看看是否有更好的选择。
有没有其他方法来实现一个系统,我们有一个可以访问一行类的主类,它们是彼此之间的朋友?我没有找到任何其他方法来完成这项工作:继承不起作用,因为类的工作方式与另一个完全不同,并且使用成员类不是一个选项,因为那样我将构造另一个实例同一个类,这不是一种选择,因为我有一个像 logger 这样的非原子类,应该只有一个实例。
这就是我的想法:
【问题讨论】:
-
如果使用得当,单身人士没有任何问题!
-
那么,在这种特定情况下,允许使用单音模式制作记录器类,这样每个人都可以使用它,但是类之间的交互呢?我应该只使用朋友 - 朋友的方式,还是我可以做其他事情?我的主要目标是确保代码库由“模块”组成,这些“模块”正在做他们被告知要做的事情,并在必要时使用其他类的方法来帮助完成任务。
-
记录器通常是单例的好案例。 CRC32 类似乎是错误的,也许使用命名空间中的函数?或者,如果它只是一个函数,那么就让它保持一个函数。 “网络”似乎广义上是一个单一的类,但可能是一个具有多个类的命名空间(
Socket、ClientSocket、ServerSocket等,或类似的东西)。并尽可能避免friend。如果Archivation应该是一个序列化类,请考虑例如Boost serialization 而不是自己制作。 -
CRC32 不仅仅是一个函数,它的一组函数构建在 CRC32 之上(例如,从文件中获取 crc,从字符串中获取 crc 等)事实上,这不仅仅是一个单一的课程,我试图让事情变得简单,以便人们能够理解我在说什么。剩下的唯一问题是,我仍然需要以某种方式确保 MainClass 中只有一个这些模块的实例,并且它们仍然可以通信。我正在尝试尽可能多地重用代码,并尽量减少实例数量。
标签: c++ architecture singleton friend class-design