Абстрактная фабрика ► Шаблон проектирования ► Урок №5
HTML-код
- Опубликовано: 5 окт 2024
- Порождающие шаблоны проектирования - Абстрактная фабрика (Abstract factory). Изучаем шаблон (паттерн) проектирования из семейства фабрик.
Абстрактная фабрика - это порождающий паттерн проектирования, который позволяет создавать семейства связанных объектов, не привязываясь к конкретным классам создаваемых объектов.
#шаблоны_проектирования #design_patterns #абстрактная_фабрика
*
★ Автор: Дмитрий Афанасьев.
★ Телеграм с новостями: t.me/i640kb
★ Канал: clck.ru/JVYct
*
► Выразить благодарность, поддержать донатом развитие канала.
★ www.tinkoff.ru...
★ www.donational...
*
► Еще интересные курсы:
★ Видеокурс по Laravel: clck.ru/JVYa2
★ Видеокурс по Git: clck.ru/JVYYm
★ Объяснение SOLID: clck.ru/JVYXq
★ Шаблоны проектирования: clck.ru/JVYX7
★ Структурные шаблоны проектирования: clck.ru/TVB9Y
★★★ Все курсы → clck.ru/JVYVd
*
► Обязательно к изучению любому разработчику
★ www.ozon.ru/ca...
★ www.chitai-gor...
⚝⚝⚝ Покровители канала:
► Константин [ ⚝⚝ Меценат ]
Сообщение: "Спасибо за отличные уроки по Laravel";
Сообщение2: "Материал такого уровня можно смело продавать, а вы дарите бесплатно. Не могу пройти мимо и не поддержать ещё раз";
.
► Аким
Сообщение: "Дмитрий, привет! Спасибо огромное за крутой курс по Laravel, весь еще не прошел. Вопрос: есть форма загрузки csv...";
.
► Александр Дера
Сообщение: "...И теперь у меня к вам вопрос: занимаетесь ли вы менторством? Если да, то свяжитесь со мной удобным для вас способом. VK, facebook...";
.
► Mordwin
Сообщение: "Спасибо за контент. Устроюсь на нормальную работу - подкину больше)";
.
► Александр Мельник
Сообщение: "Вы снимаете классные уроки, спасибо.";
.
► Дмитрий
Сообщение: "На кусочек провода для нового света :) Огромное спасибо за laravel курс! Помимо всего полезного оч порадовало то, что видео не сухие, есть какие-то отступления, шутки. Но… Я поленился и сам закодил далеко не всё. Хотелось бы получить последние исходники (Laravel, урок №50). Email ****"
.
► Алексей Сукач
Сообщение: "Спасибо за уроки. Надеюсь, не забросишь)"
.
► Lavr
Сообщение: "Большое спасибо за канал!"
.
► Павел Пожетнов
Сообщение: ""
.
► Александр
Сообщение: "С нетерпением жду продолжения!!!";
.
► Алексей Украинцев
Сообщение: "Спасибо за курс жду продолжения, особенно на тему пользовательских ролей";
.
► Александр
Сообщение: "Дмитрий не бросайте начатое! Большое спасибо за то что вы уже сделали! ИМХО отличная подача материала и разъяснения. Буду ждать продолжения.";
.
► Николай Савин
Сообщение: "Спасибо за знания";
.
► Аноним
Сообщение: "Спасибо за курс, особенно нравится материал про архитектуру приложения.";
.
► Yoyshinoda
Сообщение: "Спасибо за видеокурс по Laravel ( уже появилось желание просмотреть другие). Благодаря этому курсу очень легко ощущаю себя в переходе с C++/C# (Пара-тройка лет в коммерческих проектах) на php. Из пожеланий, с удовольствием, бы просмотрел некий ваш личный топ литературы по этому делу";
.
► Аноним
Сообщение: "Для поднятия настроения";
.
► NGL Biathlon
Сообщение: Большое спасибо за курсы!";
.
► Иван
.
► Tetragrammaton
Сообщение: "Дмитрий, спасибо за вашу работу.";
.
► Oleg Yurchenko
Сообщение: "Спасибо! Пили видосы чаще! SeriousSloth";
.
► Аноним
Сообщение: "Хотелось бы чтобы почаще видео были";
.
► Дмитрий Лейко
Сообщение: "Спасибо за уроки!!! Удачи!";
.
► Andrew
Сообщение: "На пиуко) P.S. Спасибо за крутой курс!";
.
► Виталий Котов
Сообщение: "Привет! Спасибо за видео, но к сожалению застрял в самом начале, не могу двигаться дальше, интернет перерыл, но по английски я не очень(что бы читать форумы), а по русски не нашел ничего, а что нашел, то не работает. Ответь пожалуйста на мой вопрос..";
.
► Паша Гудман
Сообщение: "Не так давно наткнулся на ваш канал с целью грамотного подхода к изучению Laravel и, в целом, процесса разработки. Спасибо за то, что вы делаете. Удачи в вашем деле.";
.
► Ярослав;
.
► Дмитрий
Сообщение: "Спасибо за уроки, смотрю параллельно еще курс, такой нудный в отличие от твоего, так держать"
;
.
► Руслан Васильчиков
Сообщение: "Наконец-то я продвинулся дальше миграций в изучении Laravel. ** * как-то не зашел ;)"
;
.
► Александр;
.
► Бахтиёр
;
Спасибо за поддержку, друзья!;
Супер! Спасибо за Вашу работу!
Огромное благодарю за отличный материал! Успехов вам!
И плотник, и столяр - это специалисты по дереву, хотя к установке дверей они имеют тоже косвенное отношение. Аналогом для металлических изделий является слесарь. Но и он тоже обычно не занимается установкой дверей. Установкой дверей занимается установщик дверей или монтажник. И в общем случае он может ставить как деревянные, так и металлические двери, принцип там один и тот же. Разве что при монтаже металлических дверей часто применяют сварку.
Очень круто большое спасибо! Дошло, не с первого раза, но дошло)
Спасибо тебе! Я до твоих видосов вообще ничего по паттернам проектирования не мог понять, хотя изучал. А ты так круто все разложил до меня все дошло как оно работает. Удачи тебе. Ты крут!
Благодарю!
Дмитрий, спасибо за труды! Ты отлично излагаешь материал. Твоя вода - это именно то, что мне нужно для полноценного понимания паттернов :)
Благодарю!
Это сарказм или похвала?
А переключалку можно повесить на паттерн Delegation, чтобы всех в конец запутать :D
Очень круто. Молодец. Видно, что подходишь ответственно, много полезной информации.
Из всех видео по шаблонам я сделал вывод, что сперва нужно реализовать архитектуру на интерфейсах, а потом уже писать реализацию.
Спасибо бро, я даже не PHP парень, но мне все равно оказалось полезно. От меня лайк, если найду хорошую работу то обязательно задоначу!
например переключение типа подключения к бд в PDO, реализует этот шаблон
Thank you SO MUCH!!!
Благодарю!
Твердый лайк! Изучаю дальше...
Ты мужик супер!
Видео как всегда отличное. Ждем дальше. Спасибо
Спасибо )
Жаль, что джавовых блоггеров таких нет)
Прикольно понравилось, разобрался
Я бы в этом примере вместо свитча с типом внедрил бы зависимость через интерфейс и менял бы реализацию для интерфейса, хотя если абстрагироваться от ларавел, то это чуть более тяжело сделать, но тоже не трудно, как по мне это лучше, чем такой свитч при создании экземпляра фабрики.
Но а вообще тяжело представить практическую реализацию в проекте на PHP. Поискал в интернете примеры и дальше гуи интерфейсов никто не уходит с примерами, что печально и складывается такое впечатление, что Порождающие паттерны чаще используются в языках имеющие возможность работать с графическими элементами или для игр.
Спасибо за труд, очень позновательно.
ну можно еще переключаться между разными операционными системами. Т.е. если прога запущена на винде, то внутри должны использоваться только классы по работе с виндой
Спасибо!
По логике, "класс-переключатель" и есть абстрактная фабрика - этот класс не привязан к конкретным объектам - "деревянная дверь", "стальная дверь", а порождает абстрактный объект - "дверь". Абстрактная фабрика инкапсулирует в себе конкретные фабрики. У всех фабрик общий интерфейс.
Как будто бы от этого разрастется конструктор, и к этому лучше будет использовать фабричный метод
Дмитрий, большое спасибо за ваши видео курсы. Не то, чтобы это замечание, как просто мнение. Для тех, кто не изучал другие паттерны, такое изложение абстрактной фабрики будет скорее понятно, но для тех, кто изучал и другие, будет не совсем понятно, лично мне примерно после 10 мин начало казаться, что вы начали рассказывать про паттерн стратегия (так как это его роль писать разные вариации алгоритмов и они при этом взаимозаменяемы). В этом видео курсе очень сливается абстрактная фабрика с паттерном стратегия, несмотря на то, что фабрика для порождения объектов а стратегия поведенческий)
Спасибо за комментарий - напиши ссылку на более корректное определение с примером на php.
@@DmitryAfanasyev на php не скину, так как я пишу на шарпах) Но могу привести более приближенное изложение абстрактной фабрики на шарпе) Я прицепился к сути паттерна а не к коду, а у вас суть сводится к Стратегии) Я про это)
Так дай мне более конкретнкю инфу и я сниму дополнение (при условии корректности новой информации)
@@DmitryAfanasyev Я пришел сюда, чтобы углубить свои познания с данным паттерном, но увидел дилемму с невероятно схожим объяснением как в случае стратегии. Вот более приближенное объяснение паттерна абстрактная фабрика: shwanoff.ru/abstract-factory/. Если я ошибаюсь, что вполне возможно, то прошу поправить мое мнение и аргументировать ваше.
Принято! Рассмотрю! Если потребуется сниму доп. видео (будет зависеть от того что там в этой ссылке). Спасибо за аргументированное замечание!
Название паттерна звучит круто)
Абстрактная фабрика нужна что-бы делать переключения?
бомба
Привет, спасибо. У меня тоже есть такая книга . Удачи.
Разница между паттерном Фабричный метод и Абстрактная фабрика в том, что в Фабричном методе один метод абстрагируется, а в абстрактной фабрике больше одного? Не могу уловить суть. В обоих случаях на основе интерфейсов отдается некий обьект класса
24:09 - больше похоже на фабричный метод чем на абстрактную фабрику.
Во многих реализациях шаблона Abstract Factory применяется шаблон Factory Method, хотя это и не обязательно.
Понял пример с дверями.Сейчас читаю книгу PHP.Объекты.Шаблоны программирования.И там дошел до шаблонов для программирлвания гибких объектов,и чето сложно всё это понять потомучто примеры техже продуктов на инглиш типо Appencoder и иногда тупо непонимаешь что происходит а только как происходит.Наверно откладывать инглиш уже нельзя.
Спасибо за видео! Оно классное, но пример с переключением темы оформления сайта честно говоря не понравился.
Интересно, насколько часто этот пример, с реализацией тем оформления web-сайтов
(именно web-сайтов с рендерингом на сервере, не десктопного ПО, не java приложений,
не фронтенд SPA приложений) через абстрактную фабрику встречается в реальности?
Поясню, почему закрались смутные сомнения.
Вопрос поставлю очень подробно, даже чересчур подробно, чтобы понять где именно я ошибаюсь.
В книге банды четырёх в самом начале упоминается связка MVC.
Используя эту связку реализованы практически все популярные php фреймверки.
Расшифровывается MVC как Model View Controller.
Модели - это классы PHP (в случае с бекенд-фреймвёрками), которые реализуют работу с базой.
Контроллеры - это классы PHP (в случае с бекенд-фреймвёрками), которые реализуют бизнес-логику (например, если пользователь ввел в форму телефон,
сохраним его в базу(через модель конечно же), а пользователю покажем страницу со списком для выбора населенного пункта).
А вот V - view - это Вид.
То есть, в случае с бекенд-фреймверком это наш html+css+js.
Лежит всё это хозяйство (условно говоря, html) в любом бекенд фреймверке в отдельном каталоге (например, в Symfony это templates для html в виде twig файлов).
И если надо создать переключалку тем оформления сайта, почему просто не создать в каталоге templates
папку semanticUI,
в неё положить новую верстку,
а в контроллерах указать, что:
// Если пользователь выбрал в своей "переключалке" тему оформления semanticUI
if ('semanticUI' == $userSettings->getSiteTheme($user)) {
return $this->render('semanticUI' . '/license.html.twig', $aData);
}
(Понятно, что подобный код можно поместить в родительский контроллер приложения
(перегрузить метод render) , чтобы не редактировать каждый метод каждого класса.)
Мне кажется это проще и удобнее, чем реализовывать переключение дизайна через Абстрактную фабрику.
M в MVC - это не модель работы с базой вроде ELoquent, это "слой модели", в котором находится бизнес-логика (всякие сервисы, команды и т.п.). Контроллер в идеале не должен содержать бизнес-логику, хотя зачастую её там оставляют чтобы заранее не усложнять приложение, либо просто из-за лени.
Касательно переключения темы - в целом вы правы, но тут задача немного про другое. Иногда на проектах используются генераторы HTML, например для создания однотипных форм, нечто вроде:
$form = $factory->createForm();
$form->addInput(...)->addInput(...)->addSelect(...)->addButton(...)->...
В данном случае мы 1 раз описываем содержимое формы, не привязываясь к конкретному дизайну. И поскольку стили для всех этих input и button давно написаны, нам не нужно для этой формы создавать какие-то шаблоны в templates, тем более с разными вёрстками под каждую библиотеку.
Кажется похож на паттерн Адаптер
Вопрос: В основе постройки этой Абстрактной фабрики (Инструментария) лежит один из принципов SOLID, такой как LSP (строгая типизация интерфейсами)?
Имхо скорее O + D.
Хорош
Но ведь жесткое типизирование было введено только в 7-й версии пхп. Как тогда реализовывали этот шаблон без возможности указания типа возвращаемых данных?
жесткого типизирования в пхп и сейчас нет
Дайте, пожалуйста, ссылку на ваш репозиторий из видео. Обучалки крутые!
Нет такой ссылки. Надо руками код набирать.
@@DmitryAfanasyev вы то не набирали, а из Википедии взяли)))
Ну так и вы забирайте возьми от туда. В чем вопрос?
Лайк++
Дмитрий, подскажите. Осваиваю ООП, хочу укрепить знания и желаю изучить фреймворк, у вас прошел курс Эксперт по PHP. Посоветуйте выбрать фрейморк и если ларавел, то с каких плейлистов начать, ларавел, solid, шаблоны проектирования или другие и какие книги почитать? Благодарю.
"Эксперт PHP" -> ООП -> солид -> шаблоны(пробежаться, не изучать) -> laravel (текущий курс) -> шаблоны (изучать)
@@DmitryAfanasyev Благодарю! а то я начал проходить solid, но там упоминание идет о паттернах, думал с них начать. По laravel, начинать с этого плейлиста Laravel: Ratchet - WebSocket., или с 5 версии или 6? там уже обновленные (актуальные данные обсуждают) или какие то технологии отпали с переходом на 6 версию?
Laravel - Видеокурс: ruclips.net/p/PLoonZ8wII66iP0fJPHhkLXa3k7CMef9ak
"или какие-то технологии отпали" - смотри тематическое видео о 6й версии
@@DmitryAfanasyev Благодарю!)
+1