C++ C++;:同一体系结构层的成员功能访问建议
我有以下四个等级:C++ C++;:同一体系结构层的成员功能访问建议,c++,architecture,C++,Architecture,我有以下四个等级: MyTop | ------------------- | | | BlockA BlockB BlockC BlockA、BlockB和BlockC是MyTop的组合对象BlockA提供了一个函数LookUpTable(),而BlockB和BlockC现在需要访问Bloc
MyTop
|
-------------------
| | |
BlockA BlockB BlockC
BlockA
、BlockB
和BlockC
是MyTop
的组合对象BlockA
提供了一个函数LookUpTable()
,而BlockB
和BlockC
现在需要访问BlockA
拥有的查找表。BlockB
和BlockC
访问查找表的好做法(或至少是典型做法)是什么
我曾考虑将查找表本身作为一个类来实现,但循环表的内容与BlockA
的初始化稍微耦合,将表与BlockA
解耦可能不是一件小事(这仍然可行,但不是首选)。现在我的解决方案是将请求从BlockB
和BlockC
传递到MyTop
,并让MyTop
管理块之间的通信。但是,当有更多的块需要访问BlockA
中的查找表时,这似乎不是处理问题的好方法。我想知道这是否是一个众所周知的问题,并且已经有了一个“最佳实践”解决方案。谢谢
我考虑实施
作为类本身查找表,但是
循环表的内容是
稍微加上
BlockA的初始化,它可能
将表解耦并非小事
来自BlockA(仍然可行,但是
不可取)
您不能简单地让BlocA初始化查找表所有者对象吗?它将是一个以BlocA为好友类的单例(如果在您的情况下是正确的),以确保它是唯一访问初始化(构造?)功能的类。在当前机制下,BlockB和BlockC使用BlockA中提供的功能。我的理解是它与BlockA不同。它们不一样。p> BlockA、BlockB、BlockC继承了MyTop的方法
我不知道是否有一个通用的解决方案,但肯定有一个通用的建议:。
据我所知,您正试图访问存储在查找表中的
BlockA
数据,然后对其执行一些操作。这违反了封装原则,只有持有数据的对象才能访问和修改数据。更好的方法是将查找表功能提取到类中,并为所有三个块添加公共方法。然后创建lookup table类的三个子类,并添加仅由特定块使用的方法(如果存在任何此类方法)。在
BlockA
中,BlockB
和BlockC
使用这些类。与直接访问存储在BlockA
中的查找表相比,这允许更松散的耦合。我认为该表是单例的。但是我如何将表的访问权限授予BlockB
和BlockC
?(我知道singleton模式,但我自己从未实现过。)只需提供一个静态函数来访问唯一实例。例如,请参见此实现: