C++ DLL зависимости State-pattern

Для моего задания я создал класс Robot, у которого есть указатель на класс State. Этот класс State является интерфейсом. Реальная реализация дочерних классов State должна выполняться в отдельной DLL.

Я был в состоянии успешно сделать эти классы в отдельной DLL, так что DLL с дочерними классами State (StateDLL) ссылается только на библиотеку DLL, которая содержит класс интерфейса состояния.

Проблема начинается с конструктора класса Robot. Я должен позволить личную переменную робота State* знать, каков будет его первый дочерний класс, например (где S имеет тип State*)

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

Означает ли это, что робот должен знать о содержимом StateDLL? Есть ли способ рассказать ему о дочернем классе любым другим способом, или это не имеет значения, если я позволю RobotDLL ссылаться на StateDLL (с ​​идеей StateDLL может сильно измениться, в то время как RobotDLL должен быть более статичным)?

1 ответ

Решение

Ваш класс Robot вообще не должен знать о StateDLL, желательно, чтобы он получал экземпляр State* прошло через конструктор. Это позволит свести к минимуму зависимости, а также обеспечить возможность сменных реализаций и легкого тестирования.

Чтобы предотвратить получение RobotDLL каких-либо зависимостей от StateDLL, интерфейс состоит из фабричной функции, которая просто предоставляет State* этого будет достаточно, чтобы StateDLL можно было взаимозаменять с другой DLL-библиотекой, предоставляющей ту же фабричную функцию, или, если позднее вы решите объединить две библиотеки DLL, в RobotDLL может быть определена одна и та же функция.

Другие вопросы по тегам