【问题标题】:How to implement a hierarchy class system如何实现层次类系统
【发布时间】:2018-11-12 16:33:44
【问题描述】:

我对 C++ 处理这种情况的方式有点陌生,所以我决定不立即使用单例模式,而是问这个问题,看看是否有更好的选择。

有没有其他方法来实现一个系统,我们有一个可以访问一行类的主类,它们是彼此之间的朋友?我没有找到任何其他方法来完成这项工作:继承不起作用,因为类的工作方式与另一个完全不同,并且使用成员类不是一个选项,因为那样我将构造另一个实例同一个类,这不是一种选择,因为我有一个像 logger 这样的非原子类,应该只有一个实例。

这就是我的想法:

【问题讨论】:

  • 如果使用得当,单身人士没有任何问题!
  • 那么,在这种特定情况下,允许使用单音模式制作记录器类,这样每个人都可以使用它,但是类之间的交互呢?我应该只使用朋友 - 朋友的方式,还是我可以做其他事情?我的主要目标是确保代码库由“模块”组成,这些“模块”正在做他们被告知要做的事情,并在必要时使用其他类的方法来帮助完成任务。
  • 记录器通常是单例的好案例。 CRC32 类似乎是错误的,也许使用命名空间中的函数?或者,如果它只是一个函数,那么就让它保持一个函数。 “网络”似乎广义上是一个单一的类,但可能是一个具有多个类的命名空间(SocketClientSocketServerSocket 等,或类似的东西)。并尽可能避免friend。如果Archivation 应该是一个序列化类,请考虑例如Boost serialization 而不是自己制作。
  • CRC32 不仅仅是一个函数,它的一组函数构建在 CRC32 之上(例如,从文件中获取 crc,从字符串中获取 crc 等)事实上,这不仅仅是一个单一的课程,我试图让事情变得简单,以便人们能够理解我在说什么。剩下的唯一问题是,我仍然需要以某种方式确保 MainClass 中只有一个这些模块的实例,并且它们仍然可以通信。我正在尝试尽可能多地重用代码,并尽量减少实例数量。

标签: c++ architecture singleton friend class-design


【解决方案1】:

简而言之:

  • YES 就像您在图表中显示的那样,可以有很多彼此之间是朋友的类。

  • ,不建议这样做,因为您将拥有高度耦合的系统,并且每次更改一个类中的某些内容时,可能会影响所有其他类。

singleton pattern 等设计模式和dependency injection 等其他技术可帮助避免此类情况,并减少coupling,以便于维护并拥有更强大的系统。

【讨论】:

  • 好的,如果我想通过使用其他类的已实现方法来减少代码库,以及减少实例数量并远离两个方式耦合那么我应该为他们坚持单例模式。明白了,谢谢。
猜你喜欢
  • 2011-10-19
  • 2016-12-31
  • 2011-12-05
  • 1970-01-01
  • 2010-12-21
  • 2019-05-10
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多