Разве шаблон фабрики не нарушает принцип "говори, не спрашивай"?
Процедурный кодекс получает информацию, затем принимает решения. Объектно-ориентированный код говорит объектам что-то делать.
Алек Шарп
Когда мы используем шаблон "Фабрика", мы принимаем решение, основываясь на свойстве класса, кроме класса "фабрика", так что это не нарушает принцип "Скажите, не спрашивайте"?
1 ответ
Нет, мы не нарушаем.
Когда мы говорим классу Factory создать экземпляр объекта, вся ответственность лежит на классе Factory. Вызывающая сторона не имеет никакого влияния на то, каким будет конкретный класс.
Сам класс Factory также не нарушает это правило. Он делает то, что должен: основываясь на данных правилах (пусть это будет жестко задано или установлено извне, или, может быть, что-то более сложное), решается, какой тип объекта генерировать. Но каждый бит логики находится внутри фабричного метода.