1

对于我的任务,我创建了一个类 Robot,它有一个指向类 State 的指针。这个 State 类是一个接口。State 子类的实际实现需要在单独的 DLL 中完成。

我已经能够在单独的 DLL 中成功创建这些类,因此带有 State 子类 ( StateDLL) 的 DLL 仅引用包含 State 接口类的 DLL。

问题从 Robot 类的构造函数开始。例如,我必须让 Robot 的私有变量State*知道他的第一个子类是什么(其中 S 是 type State*

Robot::Robot() {
    S = StateDLL::StateChild1::get();
}

这是否意味着 Robot 需要了解 StateDLL 的内容?有没有办法以任何其他方式告诉他子类,或者如果我让 RobotDLL 引用 StateDLL 没关系(想法 StateDLL 可以改变很多,而 RobotDLL 应该更加静态)?

4

1 回答 1

0

您的 Robot 类根本不应该知道 StateDLL,最好它应该State*通过构造函数获取传入的实例。这将使依赖关系保持在最低限度,并允许可交换的实现和简单的测试。

为了防止 RobotDLL 从 StateDLL 获得任何依赖关系,由一个仅提供 a 的工厂函数组成的接口State*就足以允许 StateDLL 与另一个提供相同工厂函数的 DLL 互换,或者如果您稍后决定合并两个dll 可以在RobotDLL 中定义相同的函数。

于 2015-03-25T14:39:58.570 回答