对于我的作业,我制作了一个类机器人,它有一个指向类状态的指针。此State类是一个接口。 State子类的实际实现需要在单独的DLL中完成。
我已经能够在单独的DLL中成功创建这些类,因此具有State子类(StateDLL
)的DLL仅引用包含State接口类的DLL。
问题始于Robot类的构造函数。我必须让Robot的私有变量State*
知道他的第一个子类是什么,例如(其中S的类型为State*
)
Robot::Robot() {
S = StateDLL::StateChild1::get();
}
这是否意味着Robot需要了解StateDLL内容?有没有办法以任何其他方式告诉他有关子类的信息,或者我是否让RobotDLL引用StateDLL并不重要(在RobotDLL应该更静态的情况下,StateDLL可以改变很多想法)?
答案 0 :(得分:0)
你的Robot类根本不应该知道StateDLL,最好是通过构造函数传递一个State*
的实例。这将使依赖关系保持在最低限度,并允许可交换的实现,并且易于测试。
为了防止RobotDLL从StateDLL获取任何依赖项,一个由简单地提供State*
的工厂函数组成的接口就足以允许StateDLL与另一个提供相同工厂函数的DLL互换,或者如果您稍后决定合并两个dll,则可以在RobotDLL中定义相同的函数。