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