2014-02-01 4 views
0

Я читал о шаблоне строителя, и, как обычно, я запутался с заводским рисунком.Builder pattern vs Factory Mmethod pattern

Я видел хорошую статью, которая показывает разницу между шаблоном абстрактного завода и строителем.

http://champika-nirosh.blogspot.in/2008/04/what-is-difference-between-abstract.html

Но моя путаница в том, что больше, чем строитель схеме, похожей на абстрактном заводе я чувствую, что он похож на метод фабрики шаблона. Не уверен, что мое понимание верное. Но по методу фабрики мы также используем отдельный завод (метод на конкретном заводе) для создания одного конкретного объекта (а не семейства продуктов). В этом сценарии, как построитель отличается от заводского шаблона метода. Я знал, что строитель требует больше шагов для создания объекта, кроме этого есть какой-то конкретный сценарий, который нам нужно использовать один над другим? Пожалуйста, направляйте меня.

Спасибо.

+0

Строители допускают кусочки предметов, например, * вы * решаете, какие поля установлены. Это может быть или не быть хорошей идеей; это зависит от бизнес-требований. –

ответ

3

Ваш конкретный пример использования повлияет на то, какой (если любой) вы можете выбрать. Но в основном повторить, что находится на ссылке, которую вы ссылаетесь:

Оба абстрактных фабричных и заводских метода создают экземпляры неизвестных типов. Обычно они возвращают класс, соответствующий интерфейсу, но вы не знаете (и не должны заботиться) о том, каков будет конкретный тип. Чтобы использовать изображение из этой ссылки, используется WindowsFactory, что означает, что абстрактная фабрика возвращает экземпляр, совместимый с Windows. Если ваша фабрика была вместо LinuxFactory, вы можете получить обратно объект, который работает в Linux. Обратите также внимание на то, что вы, вероятно, не знали бы, есть ли у вас LinuxFactory или WindowsFactory, просто у вас была фабрика определенного типа.

Таким образом, фабрика абстрактных фабрик & - это методы построения полиморфных типов (в том числе, когда вы не знаете или не заботитесь о конкретном типе). Однако вызов для получения экземпляра типа обычно тривиален. Для того, чтобы построить с завода, вы, вероятно, просто звоните:

MyInterfaceType myInstance = myFactory.getTheItemOfMyInterfaceType(); 

Застройщик картины больше о создании сложных объектов, которые могут или не могут быть (но, вероятно, являются) известным типа. В этом случае вы ожидаете сложную серию вызовов для построения типа, часто устанавливая один параметр за другим. Поскольку существует множество известных параметров и аргументов, вы обычно знаете, какой тип объекта вы собираетесь получить от него (не обязательно, но это скорее, чем с абстрактной фабрикой). Builder используется, когда построение объекта является сложным, но не обязательно полиморфным (оно может быть полиморфным, но это не предпосылка шаблона). Строитель вызов построить что-то может быть (см Android AlertDialog для некоторых реальных примеров):

Builder b = new Builder(); 
b.setSomeValueA(myChoiceForA); 
b.setSomeValueB(myChoiceForB); 
MyInterfaceType myInstance = b.build(); 

Надежда, что помогает.