C++DLL依赖状态模式



对于我的作业,我制作了一个类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中定义相同的函数。

最新更新