JavaScript Паттерны #3 - Abstract Factory (Абстрактная фабрика)

  Рет қаралды 26,464

webDev

webDev

Күн бұрын

#YauhenK #webDev #JS #JSPatterns
Всех приветствую в курсе «JavaScript Паттерны».
В данном видео-курсе мы с вами рассмотрим самые распространённые паттерны проектирования, которые используются при разработке.
Паттерны, или шаблоны - это определённые, зарекомендовавшие себя конструкции, которые служат для решения типовых задач программирования.
Рассматривать мы их с вами будем на примере языка JavaScript в синтаксисе ES6.
✒ Репозиторий курса:
✔ GitHub: github.com/Yau...
✒ Используемые ресурсы и инструменты:
✔ Carbon (Screenshots): carbon.now.sh/
✒ Полезные ссылки:
✔ ES6: • ES6
✒ Полный список готовых и планируемых курсов:
✔ Trello: trello.com/b/R...
✒ Автор курса:
✔ KZbin: / yauhenkavalchuk
✔ Instagram: / yauhenkavalchuk
✔ Twitter: / yauhenkavalchuk
✔ VK: YauhenK...
✔ LinkedIn: / yauhenkavalchuk
✔ GitHub: github.com/Yau...
✔ VK (Группа): webdevcom
✒ Поддержать развитие канала: github.com/Yau...

Пікірлер: 55
@ihortymonchuk2280
@ihortymonchuk2280 4 жыл бұрын
Прошу прощения, но это же вообще не реализация паттерна "Абстрактная фабрика". Еще в 1994 году "Банда четырех" написала замечательную книгу на эту тему - ru.wikipedia.org/wiki/Design_Patterns. В книге указано, что "Абстрактная фабрика" - это класс (интерфейс) для создания взаимосвязанных объектов (конкретных фабрик). Иногда абстрактная фабрика может быть и конкретной фабрикой с самой простой реализацией. Абстрактная фабрика не может быть реализована в функциональном программировании, тут мы видим только фабричные методы. В видео вы подаете абстрактную фабрику как функцию, которая возвращает конкретную фабрику по условию, тем самым вводите людей в заблуждение. P.S: Если я что-то упустил и не до конца понимаю этот паттерн, буду рад, если вы меня поправите ссылаясь на "трушный" ресурс.
@olegmaz3969
@olegmaz3969 5 жыл бұрын
В строке const myCar = new produce() думаю, что new не нужно, так как функция produce() уже возвращает new Z4() const myCar = produce() работает без ошибки
@ОленаНехрищинюк
@ОленаНехрищинюк Жыл бұрын
Дякую за класний матеріал
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
Пожалуйста
@parnasmi
@parnasmi 2 жыл бұрын
Коротко и ясно! Спасибо!
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
Пожалуйста
@yaolegoleynik
@yaolegoleynik 5 жыл бұрын
Спасибо, все очень кратко и понятно :) Купил курс по паттернам на udemy, потом увидел этот курс - запросил возврат денег (там это гарантированная функция). Теперь куплю этот курс - думаю не прогадаю :) Очень интересно было бы посмотреть Ваш курс по алгоритмам и структурам данных
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Спасибо большое. Думаю, до середины следующего года он должен выйти)
@IhorHarnyk
@IhorHarnyk 4 жыл бұрын
@@YauhenKavalchuk добрый день, дайте ссылку на курс по структурам данных
@evisotskiydev
@evisotskiydev 5 жыл бұрын
Слабоватый пример. Надо было добавить больше моделей типа спорткар и типа семейный автомобиль, и показать как абстрактная фабрика упрощает создание автомобиля необходимого типа и необходимой модели
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
А по моему, в самый раз! Задача этого курса рассказать простыми словами сложные вещи. А это просто увеличение кода, в угоду большего колличества примеров
@evisotskiydev
@evisotskiydev 5 жыл бұрын
@@YauhenKavalchuk пример должен быть приближен к реальности, чтоб можно было понять в каких случаях можно было бы применить данный паттерн. В том примере что есть, вообще не понятно зачем этот паттерн нужен. Ну и то что пишут остальные комментаторы, это только подтверждают
@yurii873
@yurii873 4 жыл бұрын
спасибо.
@YauhenKavalchuk
@YauhenKavalchuk 4 жыл бұрын
Пожалуйста
@icokie
@icokie 4 жыл бұрын
Качественно :) молодец !
@qazyhn94
@qazyhn94 5 жыл бұрын
В предидущем примере казаось что фабичным методом является тот метод где создаются обьекты в зависимости от типа и там всегда if else/switch, а тут вообще не понятно куда подевался свитч... а на самом деле свитч вообще никак не связан с ни с каким из этих паттернов, и суть предидущего патерна в том что фабричный метод переопределяется в наследниках где каждый наследник при помощи фабричного метода создает 1 обьект, а когда дело идет о абстрактной фабрике, то там есть серия обьектов, тоесть несколько фабричных методов у фабрики, и каждая фабрика их переопределяет... в данном же видео пример очнеь странный так как если я посылаю sport строку то получают в ответ метод, хотя логично было бы получить обьект который умеет делать разные виды автомобилей одно и той же серии в данном случае спортивные автомобили
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Пример вполне логичный. Абстрактная фабрика - это проста абстракция, которая может понадобится для управления фабриками, которые она оборачивает, в случае если этих фабрик стало много и контролировать исполнение их тяжело
@TalkerTube
@TalkerTube 2 жыл бұрын
То есть фабрика возвращает экземпляр конечного класса, а абстрактная фабрика - экземпляр фабрики. Получается абстрактная фабрика это просто фабрика обычных фабрик?
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
Верно
@КоноваловИлья-е7в
@КоноваловИлья-е7в 5 жыл бұрын
Ниче не понял, но впечатлился
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Попробуйте пересмотреть что-ли)) Понятнее объяснение, наверное, и не найдёте)
@ruslansergazin8239
@ruslansergazin8239 5 жыл бұрын
@@YauhenKavalchuk Т.е мы записываем в produce название класса и передаем его как название класса после оператора new. В php это вроде как называется отражением.
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Не пытайтесь провести параллель между PHP и JS
@samotosdan
@samotosdan 5 жыл бұрын
@@ruslansergazin8239 обратите внимание на скобки, возможно чуть больше розясниться, почему оно так все произошло :)
@p_levin
@p_levin 5 жыл бұрын
@@YauhenKavalchuk Как это понял я. Вызовы функций: bmwProducer - где определяется тип машины/продукта sportCarFactory - где создается экземпляр класса Z4 familyCarFactory - где создается экземпляр класса I3 после описаны сами классы Z4 и I3 далее пишем константу produce для которой присваиваем результат функции bmwProducer с параметром 'sport' а для myCar назначаем создание экземпляра конструктора из результата вышеописанной константы new produce() в результате получаем вывод инфы: Z4 is a Sport car!
@vishnyo
@vishnyo 4 жыл бұрын
Почему в уроке не используются примеры классов из предыдущего урока? Ведь так понятней было б.
@YauhenKavalchuk
@YauhenKavalchuk 4 жыл бұрын
Возможно. Однако, я хотел подобрать разные кейсы для каждого урока, что бы не возникало путаницы
@almazmusic
@almazmusic 4 жыл бұрын
Это больше про композицию, чем про абстрактную фабрику, имхо. Пример слишком неподходящий.
@andrew2340
@andrew2340 Жыл бұрын
почему в классах методы объявляются без ключевого слова function или стрелок?
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
Такой синтаксис
@THEGhost902
@THEGhost902 5 жыл бұрын
не понимаю зачем вообще абстрактная фабрика, если у нас уже есть фабрика sportCarFactory, зачем нам тогда создавать produce, не проще ли будет сразу вызвать sportCarFactory и получить тот же z4...
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Абстрактная фабрика - это отдельный паттерн со своей структурой. Не я придумывал это. И как я сказал в водном уроке, если вы не понимаете зачем тот или иной паттерн использовать, значит он вам пока не нужен
@dmitryrybalkin6871
@dmitryrybalkin6871 4 жыл бұрын
@@YauhenKavalchuk Судя по примеру это вы пока не понимаете зачем нужна абстрактная фабрика
@narzantaria1102
@narzantaria1102 5 жыл бұрын
Здравствуйте! Предлагаю рассмотреть тему, если вы с этим разбирались, - как индексировать проекты на React (REST или GraphQL). Google утверждает (с массой оговорок), что индексирует сайты на React, но яндекс этого делать не может. Последний вообще видит только чистый html, который рендерится на сервере, и для индексации на яндексе нужно создавать копии страниц с окончанием на &_escape_fragment=. Некоторые программисты вообще говорят "к черту REST Api и GraphQL", нужен серверный рендеринг и все (добро пожаловать в next и nuxt). Для чего мы тогда учим GraphQL, React и все остальное? Что вы можете нам рассказать? Подходит ли реакт для создания сайтов, блогов и тд? Спасибо за внимание!
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Мне кажется, лучше такой вопрос задать на ежемесячном стриме 31.08
@bogdanshelomanov5668
@bogdanshelomanov5668 5 жыл бұрын
фабрика как класс так и ф-я может быть? что лучше?
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Раз уж мы работаем с ООП, то лучше класс)
@TheKirk1989
@TheKirk1989 4 жыл бұрын
Не понял, ты комментарии штоль удаляешь?
@YauhenKavalchuk
@YauhenKavalchuk 4 жыл бұрын
Иногда
@TheKirk1989
@TheKirk1989 4 жыл бұрын
@@YauhenKavalchuk с виду лучшее впечатление производишь
@YauhenKavalchuk
@YauhenKavalchuk 4 жыл бұрын
А зачем мне огорчатся читая всякую ересь?
@TheKirk1989
@TheKirk1989 4 жыл бұрын
@@YauhenKavalchuk просто чот искал свой вопрос в комментах, не нашёл, а сейчас почему-то нашёл, вот и задался вопросом, куда он делся , думал ты просто не захотел отвечать, вот и удалил. Но ты все равно на него не ответил! :D хотя он предельно корректен
@YauhenKavalchuk
@YauhenKavalchuk 4 жыл бұрын
Нет, вопросы я не удаляю. Я удаляю неадекватные комментарии и необоснованные «наезды». Если критика, или замечание толковое, всё остаётся
@sergeyvorobev69
@sergeyvorobev69 5 жыл бұрын
Мне кажется было бы на много понятнее, если бы код приведенный в примерах не писался бы заранее, а был исполнен прямо в ролике
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Очень субъективно, раньше кто-то писал, что лучше наоборот делать заранее. Тем более есть GitHub репозиторий, там весь код. Можно спокойно клонировать и сравнивать)
@sergeyvorobev69
@sergeyvorobev69 5 жыл бұрын
@@YauhenKavalchuk возможно и субъективное, но из комментариев ниже понятно, что не я один мало понял, клонировать код - так это я вообще не понимаю для чего это новичку, его надо писать, что бы понимать как он работает, а на скриншотах он не работает(.
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
То что людям тяжело в патернализм, это потому что тема такая. Как её не рассказывай, пока не столкнёшься на реальном примере не поймёшь. От того, как пишется код тут ничего не зависит
@sergeyvorobev69
@sergeyvorobev69 5 жыл бұрын
@@YauhenKavalchuk возможно и так, я со своей колокольни, я прохожу курсы веб разработки, и мне легче материал усваивается когда спикер не только рассказывает но и параллельно пишет код. В целом очень крутой канал, и ради себя я не призываю ни чего менять, я как смотрел так и буду смотреть твои выпуски. Добра и Благодарность тебе огромная.
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Спасибо!)
@nikolaydemchenko6741
@nikolaydemchenko6741 3 жыл бұрын
Как всегда, самые непонятные объяснения и самые не очевидные и непонятные реализации примеров на всём русском ютубе. Сколько раз тебя смотрел, ни разу после просмотра не было ощущения, что я всё понял. И сейчас тоже, если бы не знал о чём речь, не понял бы ничего вообще.
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
А может проблема не в контенте, а в ваших скилла? Не понимаю, почему если вам не нравится контент, вы его постоянно смотрите? Проходите мимо и всё
@nikolaydemchenko6741
@nikolaydemchenko6741 3 жыл бұрын
@@YauhenKavalchuk объясню, молодец, что делаешь видео на такое количество тем. Тем досаднее то, что так не понятно приподносишь материал. Вот как хочешь, дело правильное делаешь и хотелось бы учиться по твоим роликам. Но каждый раз когда нахожу твое видео на нужную мне тему, смотрю его, я тут же понимаю, что нужно искать другой источник, потому что столько вопросов зачем всё именно так, на которые нет ответа. Да, ты познакомил с технологией, но выбрал какой-то самый короткий пример, по которому можно узнать что-то, если твой ролик уже второй или третий на эту тему. Делаешь хорошее дело, пожалуйста, хоть чуть больше разбора, а то постоянное ощущение, что краткое содержание прочитал, чтобы сдать зачёт и забыть. Ну как-то так.
Шаблоны Java. AbstractFactory (Абcтрактная фабрика)
14:34
Try this prank with your friends 😂 @karina-kola
00:18
Andrey Grechka
Рет қаралды 9 МЛН
Cheerleader Transformation That Left Everyone Speechless! #shorts
00:27
Fabiosa Best Lifehacks
Рет қаралды 16 МЛН
So Cute 🥰 who is better?
00:15
dednahype
Рет қаралды 19 МЛН
Mom Hack for Cooking Solo with a Little One! 🍳👶
00:15
5-Minute Crafts HOUSE
Рет қаралды 23 МЛН
Abstract Factory Design Pattern
13:20
Derek Banas
Рет қаралды 501 М.
JavaScript Паттерны #7 - Facade (Фасад)
5:32
Factory, Abstract Factory, Factory Method - Design Pattern (C#)
9:28
Паттерны проектирования на Python: Паттерн Фабричный метод
8:31
EngineerSpock - IT & программирование
Рет қаралды 27 М.
Try this prank with your friends 😂 @karina-kola
00:18
Andrey Grechka
Рет қаралды 9 МЛН