Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > абстрактная фабрика и фабричный метод |
Автор: redwhite90 9.3.2013, 21:47 |
Помогите почувствовать разницу между фабричным методом и абстрактной фабрикой - смотрю на 2 диаграммы и не вижу разницы. http://s1.ipicture.ru/uploads/20130309/zxu8iqhh.bmp из вычитанного везде - делаю вывод о разном количестве интерфейсов продуктов. Но это как-то нелогично. |
Автор: jk1 10.3.2013, 11:06 |
Имхо FactoryMethod - вырожденный случай AbstractFactory для одного продукта. AbstractFactory оперирует целым семейством продуктов, каждый из которых имеет собственный интерфейс. Так что AbstractFactory добавляет еще один уровень абстракции к FactoryMethod |
Автор: redwhite90 10.3.2013, 11:37 |
я тоже вроде как в голове осознаю, что дополнительный уровень абстракции создаётся, но путаюсь в картинках вот это uml фабричного метода: http://www.radikal.ru куда абстракцию надо добавить? я просто очень запутался в диаграммах. |
Автор: batigoal 11.3.2013, 16:22 | ||
redwhite90, картинка будет такая же, но будет не один factoryMethod, а несколько - createProductA(), createProductB()... Грубо говоря, Factory Method - это просто альтернатива конструктору (зачастую более удобная). Пример:
Просто способ скрыть создание обьекта, не вызывая конструктор явно. Фабрика же - это гораздо более развесистая штука, позволяющая создавать не объект, а семейство родственных объектов. Канонический пример - интерфейс UiFactory с методами createButton, createMenu, etc с имплементациями под разные платформы или оконные менеджеры. |
Автор: redwhite90 11.3.2013, 22:23 |
Если ориентироваться на картинки, то моё мнение сейчас такое: клиентом(тот кто использует полученный продукт) в фабричном методе является creator(см. картинку), а в абстрактной фабрике есть надстройка над creator, которая собственно и позволяет делать "семейства". Поправьте, если не прав. Добавлено через 26 секунд эта надстройка - есть клиент |