Разве паттерн Factory не нарушает принцип «Говори, не спрашивай»?

Процедурный код получает информацию, а затем принимает решения. Объектно-ориентированный код говорит объектам что-то делать.

Алек Шарп

Когда мы используем шаблон Factory, мы принимаем решение, на основе свойства класса, кроме фабричного класса, поэтому это не нарушает Расскажите, принцип «Не спрашивай»?


person Masoud    schedule 26.07.2013    source источник


Ответы (1)


Нет, не нарушаем.

Когда мы указываем классу Factory создать экземпляр объекта, вся ответственность ложится на класс Factory. Вызывающий не имеет никакого влияния на то, каким будет конкретный класс.

Сам класс Factory также не нарушает этого правила. Он делает то, что должен делать: на основе заданных правил (пусть это будет жестко закодировано или задано извне, а может быть, что-то более сложное) решает, какой объект генерировать. Но каждый бит логики находится внутри фабричного метода.

person gaborsch    schedule 26.07.2013
comment
но, например, класс Factory принимает решение на основе состояния продукта в oodesign.com/factory-pattern. .html пример. (спрашивая продукт, а затем принимая решение) - person Masoud; 26.07.2013
comment
Вы имеете в виду на основе идентификатора продукта? это не проблема, потому что только класс Factory может знать обо всех возможных классах, и у него есть логика, чтобы решить, какой из них использовать. Вы не можете делегировать эту ответственность никакому другому классу. - person gaborsch; 26.07.2013