Абстрактная фабрика ► Шаблон проектирования ► Урок №5

Поделиться
HTML-код
  • Опубликовано: 17 июл 2019
  • Порождающие шаблоны проектирования - Абстрактная фабрика (Abstract factory). Изучаем шаблон (паттерн) проектирования из семейства фабрик.
    Абстрактная фабрика - это порождающий паттерн проектирования, который позволяет создавать семейства связанных объектов, не привязываясь к конкретным классам создаваемых объектов.
    #шаблоны_проектирования #design_patterns #абстрактная_фабрика
    *
    ★ Автор: Дмитрий Афанасьев.
    ★ Телеграм с новостями: t.me/i640kb
    ★ Канал: clck.ru/JVYct
    *
    ► Выразить благодарность, поддержать донатом развитие канала.
    ★ www.tinkoff.ru/rm/afanasev.dm...
    ★ www.donationalerts.ru/r/dmitr...
    *
    ► Еще интересные курсы:
    ★ Видеокурс по Laravel: clck.ru/JVYa2
    ★ Видеокурс по Git: clck.ru/JVYYm
    ★ Объяснение SOLID: clck.ru/JVYXq
    ★ Шаблоны проектирования: clck.ru/JVYX7
    ★ Структурные шаблоны проектирования: clck.ru/TVB9Y
    ★★★ Все курсы → clck.ru/JVYVd
    *
    ► Обязательно к изучению любому разработчику
    ★ www.ozon.ru/category/knigi-16...
    ★ www.chitai-gorod.ru/search/re...

Комментарии • 65

  • @DmitryAfanasyev
    @DmitryAfanasyev  5 лет назад +5

    ⚝⚝⚝ Покровители канала:
    ► Константин [ ⚝⚝ Меценат ]
    Сообщение: "Спасибо за отличные уроки по 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. ** * как-то не зашел ;)"
    ;
    .
    ► Александр;
    .
    ► Бахтиёр
    ;
    Спасибо за поддержку, друзья!;

  • @denissavast
    @denissavast 5 месяцев назад +2

    Огромное благодарю за отличный материал! Успехов вам!

  • @user-ck6sx5tr8g
    @user-ck6sx5tr8g 9 месяцев назад +2

    Очень круто большое спасибо! Дошло, не с первого раза, но дошло)

  • @phat80
    @phat80 3 года назад +6

    И плотник, и столяр - это специалисты по дереву, хотя к установке дверей они имеют тоже косвенное отношение. Аналогом для металлических изделий является слесарь. Но и он тоже обычно не занимается установкой дверей. Установкой дверей занимается установщик дверей или монтажник. И в общем случае он может ставить как деревянные, так и металлические двери, принцип там один и тот же. Разве что при монтаже металлических дверей часто применяют сварку.

  • @eagledev_tank
    @eagledev_tank Год назад

    Ты мужик супер!

  • @MrDerdya
    @MrDerdya 3 года назад +4

    Спасибо тебе! Я до твоих видосов вообще ничего по паттернам проектирования не мог понять, хотя изучал. А ты так круто все разложил до меня все дошло как оно работает. Удачи тебе. Ты крут!

  • @nbrains6380
    @nbrains6380 3 года назад +5

    А переключалку можно повесить на паттерн Delegation, чтобы всех в конец запутать :D

  • @gregoriikarman4289
    @gregoriikarman4289 3 года назад +3

    Очень круто. Молодец. Видно, что подходишь ответственно, много полезной информации.

  • @eleimt
    @eleimt 5 лет назад

    Видео как всегда отличное. Ждем дальше. Спасибо

  • @alexanderk4481
    @alexanderk4481 Год назад

    Спасибо )

  • @frontend_dev
    @frontend_dev 3 года назад +5

    Дмитрий, спасибо за труды! Ты отлично излагаешь материал. Твоя вода - это именно то, что мне нужно для полноценного понимания паттернов :)

  • @user-uh1rm8py7b
    @user-uh1rm8py7b 4 года назад

    Твердый лайк! Изучаю дальше...

  • @TimurMelnikov
    @TimurMelnikov 4 года назад

    Спасибо!

  • @user-gw2rx7sq7j
    @user-gw2rx7sq7j Год назад

    Благодарю!

  • @user-bf5sb1fs1w
    @user-bf5sb1fs1w 2 года назад

    Thank you SO MUCH!!!

  • @user-ly5np1cz6j
    @user-ly5np1cz6j 3 года назад

    Прикольно понравилось, разобрался

  • @EdwardNorthwind
    @EdwardNorthwind 5 лет назад +4

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

  • @oilcake4392
    @oilcake4392 2 года назад +1

    Спасибо бро, я даже не PHP парень, но мне все равно оказалось полезно. От меня лайк, если найду хорошую работу то обязательно задоначу!

  • @dmitryleiko2869
    @dmitryleiko2869 5 лет назад

    Привет, спасибо. У меня тоже есть такая книга . Удачи.

  • @romanbush5164
    @romanbush5164 Год назад +1

    например переключение типа подключения к бд в PDO, реализует этот шаблон

  • @eaglesm1993
    @eaglesm1993 5 лет назад +1

    Название паттерна звучит круто)

  • @dmitryocheretko703
    @dmitryocheretko703 4 года назад

    бомба

  • @oldjohn1503
    @oldjohn1503 9 месяцев назад

    Жаль, что джавовых блоггеров таких нет)

  • @svchk-pub
    @svchk-pub 4 года назад

    Хорош

  • @bobpps
    @bobpps 5 лет назад

    Лайк++

  • @user-gn1ic3mv1w
    @user-gn1ic3mv1w 4 года назад

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 года назад

      Спасибо за комментарий - напиши ссылку на более корректное определение с примером на php.

    • @user-gn1ic3mv1w
      @user-gn1ic3mv1w 4 года назад

      @@DmitryAfanasyev на php не скину, так как я пишу на шарпах) Но могу привести более приближенное изложение абстрактной фабрики на шарпе) Я прицепился к сути паттерна а не к коду, а у вас суть сводится к Стратегии) Я про это)

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 года назад

      Так дай мне более конкретнкю инфу и я сниму дополнение (при условии корректности новой информации)

    • @user-gn1ic3mv1w
      @user-gn1ic3mv1w 4 года назад

      @@DmitryAfanasyev Я пришел сюда, чтобы углубить свои познания с данным паттерном, но увидел дилемму с невероятно схожим объяснением как в случае стратегии. Вот более приближенное объяснение паттерна абстрактная фабрика: shwanoff.ru/abstract-factory/. Если я ошибаюсь, что вполне возможно, то прошу поправить мое мнение и аргументировать ваше.

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 года назад

      Принято! Рассмотрю! Если потребуется сниму доп. видео (будет зависеть от того что там в этой ссылке). Спасибо за аргументированное замечание!

  • @TimmertPlay
    @TimmertPlay 3 года назад +1

    Я бы в этом примере вместо свитча с типом внедрил бы зависимость через интерфейс и менял бы реализацию для интерфейса, хотя если абстрагироваться от ларавел, то это чуть более тяжело сделать, но тоже не трудно, как по мне это лучше, чем такой свитч при создании экземпляра фабрики.
    Но а вообще тяжело представить практическую реализацию в проекте на PHP. Поискал в интернете примеры и дальше гуи интерфейсов никто не уходит с примерами, что печально и складывается такое впечатление, что Порождающие паттерны чаще используются в языках имеющие возможность работать с графическими элементами или для игр.
    Спасибо за труд, очень позновательно.

    • @eidenrid7735
      @eidenrid7735 3 года назад

      ну можно еще переключаться между разными операционными системами. Т.е. если прога запущена на винде, то внутри должны использоваться только классы по работе с виндой

  • @abvgd9498
    @abvgd9498 4 года назад +1

    Абстрактная фабрика нужна что-бы делать переключения?

  • @user-ce1qg9go7w
    @user-ce1qg9go7w 2 года назад

    Вопрос: В основе постройки этой Абстрактной фабрики (Инструментария) лежит один из принципов SOLID, такой как LSP (строгая типизация интерфейсами)?

    • @KichatovAY
      @KichatovAY Год назад

      Имхо скорее O + D.

  • @andreylamzin8993
    @andreylamzin8993 3 года назад

    Спасибо за видео! Оно классное, но пример с переключением темы оформления сайта честно говоря не понравился.
    Интересно, насколько часто этот пример, с реализацией тем оформления 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) , чтобы не редактировать каждый метод каждого класса.)
    Мне кажется это проще и удобнее, чем реализовывать переключение дизайна через Абстрактную фабрику.

    • @KichatovAY
      @KichatovAY Год назад

      M в MVC - это не модель работы с базой вроде ELoquent, это "слой модели", в котором находится бизнес-логика (всякие сервисы, команды и т.п.). Контроллер в идеале не должен содержать бизнес-логику, хотя зачастую её там оставляют чтобы заранее не усложнять приложение, либо просто из-за лени.
      Касательно переключения темы - в целом вы правы, но тут задача немного про другое. Иногда на проектах используются генераторы HTML, например для создания однотипных форм, нечто вроде:
      $form = $factory->createForm();
      $form->addInput(...)->addInput(...)->addSelect(...)->addButton(...)->...
      В данном случае мы 1 раз описываем содержимое формы, не привязываясь к конкретному дизайну. И поскольку стили для всех этих input и button давно написаны, нам не нужно для этой формы создавать какие-то шаблоны в templates, тем более с разными вёрстками под каждую библиотеку.

  • @Jonstonrich
    @Jonstonrich 3 года назад +2

    24:09 - больше похоже на фабричный метод чем на абстрактную фабрику.

    • @draackul
      @draackul 3 года назад +1

      Во многих реализациях шаблона Abstract Factory применяется шаблон Factory Method, хотя это и не обязательно.

  • @lonchakovav
    @lonchakovav 7 месяцев назад

    По логике, "класс-переключатель" и есть абстрактная фабрика - этот класс не привязан к конкретным объектам - "деревянная дверь", "стальная дверь", а порождает абстрактный объект - "дверь". Абстрактная фабрика инкапсулирует в себе конкретные фабрики. У всех фабрик общий интерфейс.

  • @romanbush5164
    @romanbush5164 Год назад +1

    Как будто бы от этого разрастется конструктор, и к этому лучше будет использовать фабричный метод

  • @nikitak7669
    @nikitak7669 3 года назад

    Дайте, пожалуйста, ссылку на ваш репозиторий из видео. Обучалки крутые!

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 года назад

      Нет такой ссылки. Надо руками код набирать.

    • @nikitak7669
      @nikitak7669 3 года назад

      @@DmitryAfanasyev вы то не набирали, а из Википедии взяли)))

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 года назад

      Ну так и вы забирайте возьми от туда. В чем вопрос?

  • @baurbaur332
    @baurbaur332 4 года назад

    Понял пример с дверями.Сейчас читаю книгу PHP.Объекты.Шаблоны программирования.И там дошел до шаблонов для программирлвания гибких объектов,и чето сложно всё это понять потомучто примеры техже продуктов на инглиш типо Appencoder и иногда тупо непонимаешь что происходит а только как происходит.Наверно откладывать инглиш уже нельзя.

  • @rank5011
    @rank5011 4 года назад

    Дмитрий, подскажите. Осваиваю ООП, хочу укрепить знания и желаю изучить фреймворк, у вас прошел курс Эксперт по PHP. Посоветуйте выбрать фрейморк и если ларавел, то с каких плейлистов начать, ларавел, solid, шаблоны проектирования или другие и какие книги почитать? Благодарю.

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 года назад +2

      "Эксперт PHP" -> ООП -> солид -> шаблоны(пробежаться, не изучать) -> laravel (текущий курс) -> шаблоны (изучать)

    • @rank5011
      @rank5011 4 года назад

      @@DmitryAfanasyev Благодарю! а то я начал проходить solid, но там упоминание идет о паттернах, думал с них начать. По laravel, начинать с этого плейлиста Laravel: Ratchet - WebSocket., или с 5 версии или 6? там уже обновленные (актуальные данные обсуждают) или какие то технологии отпали с переходом на 6 версию?

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 года назад +1

      Laravel - Видеокурс: ruclips.net/p/PLoonZ8wII66iP0fJPHhkLXa3k7CMef9ak

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 года назад +1

      "или какие-то технологии отпали" - смотри тематическое видео о 6й версии

    • @rank5011
      @rank5011 4 года назад

      @@DmitryAfanasyev Благодарю!)

  • @GeraltTheSLAYER
    @GeraltTheSLAYER 4 года назад

    Но ведь жесткое типизирование было введено только в 7-й версии пхп. Как тогда реализовывали этот шаблон без возможности указания типа возвращаемых данных?

    • @karenmelikyan3888
      @karenmelikyan3888 4 года назад

      жесткого типизирования в пхп и сейчас нет

  • @user-mg2yr1zv2c
    @user-mg2yr1zv2c 10 месяцев назад

    Кажется похож на паттерн Адаптер

  • @agnar878
    @agnar878 Год назад

    Разница между паттерном Фабричный метод и Абстрактная фабрика в том, что в Фабричном методе один метод абстрагируется, а в абстрактной фабрике больше одного? Не могу уловить суть. В обоих случаях на основе интерфейсов отдается некий обьект класса

  • @vitall789
    @vitall789 3 года назад

    +1