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 может быть определена одна и та же функция.