1 / 1 / 2
Регистрация: 11.02.2014
Сообщений: 97
|
||||||
Фабричный метод12.01.2016, 19:47. Показов 1674. Ответов 12
Метки нет Все метки)
(
Добрый вечер. Заранее извиняюсь за создание темы о паттерне в этом разделе (в соответствующем разделе видел похожие темы но для php, в котором я ни бум бум).
На сколько я понимаю классический способ создание фабричного метода такой. У нас есть интерфейс продукт, и классы конкретный продукт которые его наследуют. Также у нас есть интерфес фабрики, классы которые наследуют этот интерфейс и в этих классах методы которые возвращают обьекты соответствующих продуктов. код:
0
|
12.01.2016, 19:47 | |
Ответы с готовыми решениями:
12
Паттерн фабричный метод Фабричный метод и RAII Фабричный метод и паттерн фабрика |
![]() ![]() 2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
12.01.2016, 20:16 | |
Смысл в том что вы делегируете создание объекта другому классу. Это повышает модульность программы и следовательно облегчает её поддержку. В данном примере практической пользы конечно же никакой но это всего лишь демонстрация
1
|
![]() 345 / 141 / 51
Регистрация: 02.12.2015
Сообщений: 333
|
|
13.01.2016, 06:43 | |
Фабрика нужна чтобы можно было определять тип создаваемого объекта динамически, в момент исполнения. Когда создание через new приходится сразу прописать имя конкретного класса и изменить без перекомпиляции это нельзя.
Допустим есть алгоритм который создаёт некую сложную структуру из множества объектов одного класса. Если использовался new, то чтобы создать такую же структуру из объектов другого класса придётся внести изменения в код этого алгоритма. А можно создавать новые объекты через фабрику, и фабрику передавать в алгоритм как параметр. Тогда не меняя код реализующий этот алгоритм мы можем использовать его чтобы создавать структуры данных из объектов других классов.
0
|
![]() 345 / 141 / 51
Регистрация: 02.12.2015
Сообщений: 333
|
|||||||
13.01.2016, 15:23 | |||||||
Выбор типа происходит динамически вот здесь:
Добавлено через 6 минут
0
|
0 / 0 / 0
Регистрация: 25.05.2017
Сообщений: 3
|
||||||
25.05.2017, 05:49 | ||||||
Я вот тоже не понимаю. В чем разница - к конкретному застройщику мы обращаемся по имени. Так и к создаваемому объе кту можем по имени обратиться. Где выгода ?
0
|
![]() 3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
|
25.05.2017, 08:45 | |
погуглить то, конечно не судьба http://www.javenue.info/post/17
0
|
0 / 0 / 0
Регистрация: 25.05.2017
Сообщений: 3
|
|
25.05.2017, 12:18 | |
Спасибо конечно, но похоже на очередную ссылку на описание фабричн метода. Где там ответ на мой вопрос - вот это ?? -
". Это позволяет использовать в коде программы не специфические классы, а манипулировать абстрактными объектами на более высоком уровне." К сожалению , это мало о чем говорит мне. ООП на практике не применял. Как именно это все работает - более-менее понятно. Про полиморфизм и создание экземпляров, приведённых к базовому типу для унифицированной работы с разными дочерними объектами, я вкурсе. Но , мой вопрос выше, увы, остаётся в силе. Все равно мы создаём экземпляры классов, создающих объекты, чем это лучше, что мы создавали бы сами объекты...
0
|
![]() 345 / 141 / 51
Регистрация: 02.12.2015
Сообщений: 333
|
||
25.05.2017, 13:57 | ||
Например можно создать класс "Поселок" и в зависимости от типа переданного ему в конструктор Developer'а он будет застраиваться деревянными или панельными домами. И можно будет создавать новые типы Developer'ов и создавать поселки из других типов домов не переделывая сам класс "Поселок".
2
|
0 / 0 / 0
Регистрация: 25.05.2017
Сообщений: 3
|
|
25.05.2017, 14:43 | |
Спасибо! Кстати да, в примерах уже с Абстрактной фабрикой, я помню, там как раз класс-строитель подавался как параметр конструктору класса Client.
0
|
25.05.2017, 14:43 | |
Помогаю со студенческими работами здесь
13
Отличие паттернов Фабричный метод и Абстрактная фабрика
Фабричный метод, хочу уточнить один момент Как реализовать версионность для rest api при посредстве паттерна фабричный метод? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
|
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
|
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
|
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
|
Множества в Python
py-thonny 11.06.2025
В Python существует множество структур данных, но иногда я сталкиваюсь с задачами, где ни списки, ни словари не дают оптимального решения. Часто это происходит, когда мне нужно быстро проверять. . .
|
Работа с ccache/sccache в рамках C++
Loafer 11.06.2025
Утилиты ccache и sccache занимаются тем, что кешируют промежуточные результаты компиляции, таким образом ускоряя последующие компиляции проекта. Это означает, что если проект будет компилироваться. . .
|
Настройка MTProxy
Loafer 11.06.2025
Дополнительная информация к инструкции по настройке MTProxy:
Перед сборкой проекта необходимо добавить флаг -fcommon в конец переменной CFLAGS в Makefile.
Через crontab -e добавить задачу:
0 3. . .
|
Изучаем Docker: что это, как использовать и как это работает
Mr. Docker 10.06.2025
Суть Docker проста - это платформа для разработки, доставки и запуска приложений в контейнерах. Контейнер, если говорить образно, это запечатанная коробка, в которой находится ваше приложение вместе. . .
|
Тип Record в C#
stackOverflow 10.06.2025
Многие годы я разрабатывал приложения на C#, используя классы для всего подряд - и мне это казалось естественным. Но со временем, особенно в крупных проектах, я стал замечать, что простые классы. . .
|
Разработка плагина для Minecraft
Javaican 09.06.2025
За годы существования Minecraft сформировалась сложная экосистема серверов. Оригинальный (ванильный) сервер не поддерживает плагины, поэтому сообщество разработало множество альтернатив. CraftBukkit. . .
|