Почему фабричный метод не принимает параметры в GoF Factory Method - PullRequest
2 голосов
/ 29 января 2010

В шаблоне Factory Method Design GoF я вижу, что метод FactoryMethod () не принимает параметры. Насколько я понимаю, FactoryMethod должен быть передан параметр, который будет использоваться в случае переключения, а затем на основе значения в случае переключения создаются экземпляры различных объектов класса и возвращаются вызывающей стороне. Вкратце мои вопросы таковы:

1) Должен ли я реализовать шаблон фабричного метода, точно так же, как это определено в GoF. Я также имею в виду диаграмму UML, приведенную на сайте www.dofactory.com для шаблона фабричного метода.

2) Почему шаблон фабричного метода GoF не показан с принимающим параметром?

Ответы [ 2 ]

1 голос
/ 29 января 2010

1) Должен ли я реализовать фабричный метод картина, точно так же определяется GoF. Я также имею в виду UML-диаграмма приведена на сайте www.dofactory.com для фабричного метода).

Делай все, что имеет смысл для тебя . Шаблоны - это просто ориентиры, а не категориальные законы природы.

Более того, шаблоны в GoF не являются исчерпывающими. Вы обнаружите, что открываете и внедряете шаблоны, которые никогда не появляются в книге и даже не имеют названия. И это хорошая вещь .

2) Почему шаблон фабричного метода GoF не показан принимающий параметр?

Шаблон метода фабрики - это просто особый экземпляр производного класса. В частности, у вас есть абстрактный класс с абстрактным методом и любое количество производных классов, которые реализуют метод. Обычно этот реализованный метод возвращает объект другого типа - это то, что делает его творческим шаблоном.

Итак, используя пример на DoFactory.com , классы возвращают постоянный набор объектов. Ничто в принципе не мешает пользователям передавать какой-либо параметр в фабричный метод.

Я понимаю, что FactoryMethod должен быть передан параметр, который будет использоваться в переключить случай, а затем на основе значение в корпусе переключателя, разное объекты класса создаются и вернулся к звонящему.

Вы, конечно, можете реализовать это таким образом, если это имеет смысл для вас.

0 голосов
/ 09 января 2011

2) Почему шаблон фабричного метода GoF не показан принимающий параметр?

В объектно-ориентированном программировании ваши методы должны делать одну четко определенную вещь. Передача некоторого значения для включения называется «альтернативной связностью»: вместо этого метод должен состоять из нескольких методов, по одному для каждого случая. Например:

createVeggie(veggieType)

будет разделен на

createBroccoli()
createCelery()
createCollaredGreens()

Это делает интерфейс вашего класса более чистым, облегчает его модификацию и улучшает проверку во время компиляции.

Кроме того, будьте осторожны, чтобы не нарушать намерения Фабричного метода: на самом деле необходимо избегать того, чтобы вызывающий код знал, какой объект создан. Как говорит Джульетта, вы можете реализовать что-то подобное, но тогда это уже не GoF Factory Method и не будет иметь таких же преимуществ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...