2013-10-07 5 views
3

Я пытаюсь понять, почему объект должен быть создан с использованием заводов, а не new оператора? Например:Какова цель заводов?

$validatePost = Validation::factory($_POST); 

вместо

$validatePost = new Validation($_POST); 

Статический метод factory класса делает то же самое:

public static function factory(array $array) 
    { 
     return new Validation($array); 
    } 
+0

Рекомендуем прочитать книгу, которую вы видите здесь: http://en.wikipedia.org/wiki/Design_Patterns – vee

+0

Спасибо, так это просто после шаблона или была веская причина для этого? –

+2

Я удалил свой другой комментарий и предпочел бы вам прочитать следующее: http://en.wikipedia.org/wiki/Factory_method_pattern. Не очень люблю Википедию, но это должно дать вам некоторое понимание. Но действительно рекомендую вам прочитать эту книгу (скажем, 20 раз). Я читал его примерно 50 раз! – vee

ответ

2

Таким образом, вы один метод все объекты создаются. И если вам нужно добавить дополнительные функции для создания, например, моделей, вы просто переопределите оригинальный метод factory() с вашим собственным в папке приложения.

+0

Спасибо, я понимаю, что вы говорите конкретно о цели реализации Коханы? –

+0

Что касается переопределения - да. –

3

согласно следующему вопросу:

Constructors vs Factory Methods

Используйте шаблон Factory Method, когда

a class can't anticipate the class of objects it must create 
a class wants its subclasses to specify the objects it creates 
classes delegate responsibility to one of several helper subclasses, and you want to    
localize the knowledge of which helper subclass is the delegate 
+0

@SkV, спасибо за ссылку –

1

Важно отметить, что причины, указанные в ответе Сунила (из связанного обсуждения), относятся к «классическому» шаблону фабрики GoF, который является не тем же, что и вопрос.

(К примеру, «класс не может предвидеть класс объектов он должен создать» не применяется здесь, где статически определяется все.)

статический метод завода может быть использован для разных целей, например как правило, для различных вкусов «finitons» (вкл одиночек, где п = 1.), или инкапсулировать централизованной (или иным образом нетривиального) управления ресурсами, или для архитектурной гибкости причина Денис говорил в своем ответе; и т. д.

Смежные вопросы