=)))) Я первым делом так и подумал, Иисус тоже кодит!
@MrAbad2024 жыл бұрын
@@__alexfox__, а утконос -- это баг?
@__alexfox__4 жыл бұрын
@@MrAbad202 да не, это просто нужно было что-то по быстрому для замыкания пищевых цепочек замутить, взяли часть со старого проекта, а потом забыли и в прод залили... Вроде работает, не стали трогать.
@BagratS7 жыл бұрын
Я люблю этого парня. Просто шикарное объяснение. Спасибо большое.
@Вячеслав-к1е5е Жыл бұрын
Да, _Уровень "красный"!
@GlassedUA9 жыл бұрын
Батюшка преподает дизайн паттерны ? Хмм это же офигенно!
@nikolaiii37 жыл бұрын
Это не батюшка, это Шан-Тсунг. Глаза видел?
@РоманИгумнов-л7я6 жыл бұрын
Не знаю почему, но я смеялся пол часа с этого комментария )))))))))))
@sergey-shalaev6 жыл бұрын
Батюшка не батюшка, а разложил по полочкам всё как боженька
@loam5 жыл бұрын
@@sergey-shalaev Ага, кашерно прям.
@hmixa5 жыл бұрын
@@sergey-shalaev Бредово разложил если честно, почитайте мой комент.
@АндрейЖуков-с4ц4 жыл бұрын
Потрясающе, почему не нахожу такого толкового объяснения нигде?! Большое спасибо
@Nikita041119919 жыл бұрын
Наконец то я нашел видеоуроки в которых объясняют паттерны понятным человеческим языком. Одного просмотра хватило чтобы всё стало ясно
@РусланШеламов2 жыл бұрын
А мне нет :с
@АлександрБезденежных-р5л6 жыл бұрын
Самый лучший преподаватель, каких только уроков я не смотрел, всегда самые понятные и доходчивые у Volodya Mozhenkov
@Вячеслав-к1е5е Жыл бұрын
+
@andyanderson2223 жыл бұрын
"Раз уж это русский язык, назову переменную Ж" - это было ОООЧЕНЬ многозначительно. В оценке ситуации с Вами полностью согласен)
@Ruslan__Ishmuratov2 жыл бұрын
🤣🤣🤣🤣👍
@Вячеслав-к1е5е Жыл бұрын
😁, тонко
@baron2272 Жыл бұрын
Отлично объясняете. Расскажите об использовании фабричного метода для вывода views в MVC проектах.
@learnz13734 жыл бұрын
Полнедели понять не мог практическое применение. Спасибо. Огромное спасибо
@babai56552 жыл бұрын
Фабрика - это класс в котором задается фабричный метод создания продукта, который определяет стандартный вариант поведения. Затем он делегирует подробности создания подклассам. В принципе клиент не обязательно должен вызывать непосредственно метод "СоздатьМебель" Клиент может вызвать метод фабрики, фабрика выполнит стандартные действия - например, создаст накладные. А потом уже сама вызовет"СоздатьМебель" чтобы получить стол или стул.
@Вячеслав-к1е5е Жыл бұрын
Огромная вам благодарность, святой человек за свет..
@any3develop2827 жыл бұрын
Объяснил понятно . Главное придумать куда это прикрутить. Я понял что это нужно для будущего , чтобы можно было внести изменения и не затронуть работу программы.
@brunkovsky9 жыл бұрын
Приятно слушать. Заметил, что Владимир не не делает разницы и не отдает предпочтение какому-либо языку программирования или операционной системе. По-моему, это признак мудрого человека.
@VladimirMozhenkov9 жыл бұрын
+Stas Brunkovsky О, поверьте, у меня есть предпочтение и языка и операционной системе. Просто здесь я объясняю вещи, связанные с программировании вцелом.
@brunkovsky9 жыл бұрын
+Vladimir Mozhenkov Ну да, как и у всех нас. Но не ставите на этом акцент. И, как мне показалось, уважительно относитесь к пользователям всех операционных систем и языков программирования. Благодаря тому, что рассказываете про общее, а не частное.
@IIIA_KO2 жыл бұрын
6 лет назад вышел ролик, но полезно и сейчас
@Александр-ы5м2ы8 жыл бұрын
не совсем понял, с таким же успехом в такой матод может передаваться не фабрика и не стул или стол , но Мебель. Тогда мы сможем вызвать метод someMethod(мебель) с аргументами someMethod(стул) или someMethod(стол) и цель будет достигнута. Так же мебель может запросто быть интерфейсом, что еще более упростит работу, а стало быть пример не до конца объясняет, зачем нужна именно фабрика.
@yalauitarik4 жыл бұрын
Плюс ко всему сказано, что класс МебФаб абстрактный и не может иметь свой объект, тогда как мы засовываем его в качестве аргумента в функцию foo(МебФаб МФ)
@igorbaglaev24964 жыл бұрын
@@yalauitarik поскольку СтулФаб и СтолФаб наследники МебФаб, то в foo(МебФаб мф) ты можешь подставлять СтулФаб и СтолФаб
@HerrHoldem4 жыл бұрын
И как это должно выглядеть на практике? Хотите в Мебель засунуть реализацию создания другой мебели? Это не самое лучшее решение.
@xfgweb4 жыл бұрын
Потому что этот шаблон все интерпретируют как угодно, но только не так как это задумывалось в GoF. Метод создМебель должен вызываться внутри МебФаб. То есть в МебФаб описывается некий алгоритм и внутри него вызывается метод создМебель. Кароче то что он пишет в функции foo, должно быть в МебФаб. Тогда всё очевидно. Это родственный шаблон к template method. В английской вики есть прекрасный пример реализации MazeGame где показывается верная интерпретация этого шаблона, но к сожалению там же полно и разных неверных вариантов не имеющих никакого отношения к GoF.
@youknowme97323 жыл бұрын
@@HerrHoldem Вики (рус. версия) Фабричный метод, примеры - "PHP5 современный вариант". Выполнена реализация фабричного метода в классе Animal (т.е. в Мебели). А дальше реализация без фабричного метода $class = "Lion"; (new $class)->voice(); Фабричный метод, кроме красивой записи нечего не дает.
@kerrigan_katyakatya93774 жыл бұрын
Володя спасибо!
@анатолийАнатольевич-ю4ч2 жыл бұрын
Супер!!! Спасибо!
@Борис-н3о5 жыл бұрын
Привет из 2019го, огромное спасибо за разьяснение, в нашей студенчиской методичке все слишком заумно описано, а ваше видео сделано гараздо более доступно для понимания.
@infinityen76593 жыл бұрын
какой курс ?
@alexanderakhtyrtsev57764 жыл бұрын
Спасибо огромное за такое чёткое объяснение)
@MyFearIsMyBlue2 жыл бұрын
Круто. Экстравагантно, но доходчиво!
@АленаСорока-м3у6 жыл бұрын
Первый раз слушала-не поняла. Потом почитала в статье про фабричный метод с примерами и второй раз просмотрев видео-все было понятно
@НаташаДаровских-я7в4 жыл бұрын
14:51 даа! - это интересно, даа! - это нужно! даа! - примеры на с++ :)
@kolob2043 жыл бұрын
Ох уж Этот взгляд :-) Кашпировский нервно курит в стороне.
@valshin9 жыл бұрын
Спасибо за отличный урок, что такое фабрика знал давно, а вот зачем она нужна не совсем понимал. Теперь все предельно ясно.
@VladimirMozhenkov9 жыл бұрын
Валерий Шинкаренко Видео про Абстрактную Фабрику уже выложил. Сейчас через 30 минут ещё будет про Простую фабрику. Тоже посмотрите.
@VladimirMozhenkov9 жыл бұрын
kzbin.info/www/bejne/lWbJY62pYp2YZpY
@looklikethegodfather9 жыл бұрын
Хотелось бы увидеть пример на PHP
@klev19837 жыл бұрын
Предлагаю в следующий раз создавать барную стойку и барный стул.
@Balkofag3 жыл бұрын
Спасибо за объяснение, лекция помогла
@athena60436 жыл бұрын
Спасибо за видео, Владимир. Надеюсь вы продолжите снимать ролики о паттернах.
@denislopatin31008 жыл бұрын
очень хорошо. Лично мне было бы как бонус реализация на Си примеров использования излагаемых Вами паттернов. Это не потому что не понятно через диаграммы и общие обозначение, это потому что через код лучше видно их возможное применения на практике. Спасибо за урок.
@bloodyink34233 жыл бұрын
Спасибо Вам
@zozuliar Жыл бұрын
В чем разница между Фабричным методом и Dependency Injection? При инъекции зависимостей мы тоже передаем в конструктор класса A неизвестный объект B, реализующий определённый интерфейс. А потом можно исполнять в этом первом классе A сколько угодно методов A->foo1(), A->foo2(), ..., A->fooN(). Получается. что инъекция зависимостей это более сложный вариант фабричного метода?
@КириллЧе-я5ы10 ай бұрын
шаблоны можно запрограммировать на динамическое поведение… в компайл-тайме
@koroloff887 жыл бұрын
Самое лучшее объяснение!
@USER-GU4GJJURFGJKV5 жыл бұрын
А я то думал, куда Паук из коррозии подался? )))
@ne4to7778 жыл бұрын
Собственно, а как потом определяется тип мебели? Неполный урок, так как не описана проблема. Она, как бы констатируется, но не обосновывается.
@ВладЯковлев-ш5з7 жыл бұрын
Наследование учи. Какой объект передадут , тот и выберет компилятор
@Лжеученый_Юра6 жыл бұрын
@@ВладЯковлев-ш5з Володя сказал, что классы стул и стол обычно прячут, поэтому ты не сможешь эти объекты передать. Вот это и осталось непонятным в видео.
@AlexCSharp5 жыл бұрын
@@Лжеученый_Юра Ты не можешь их создать НАПРЯМУЮ, это сделает за тебя фабрика. В этом и смысл.
@ДмитрийПономарев-д1ю5 жыл бұрын
@@AlexCSharp откуда фабрика узнает, что именно нужно создать?
@AlexCSharp5 жыл бұрын
@@ДмитрийПономарев-д1ю От запросившего, например. От настроек фабрики. От контекста зависит. Если тебе нужно создать пайплайн данных - тебе нужно будет лишь вызвать фабрику, все остальные обходимые для пайплайна объекты она создаст сама. Фабрик много, применений много. Читай "паттерны проектирования" Банды Четырёх.
@spyphyfarnsworth60506 жыл бұрын
Если видео смотреть без звука, можно подумать, что инженер мебельной фабрики объясняет слесарям как правильно собирать стулья и столы.
@johntrucena49474 жыл бұрын
впрингципе так и есть
@RTPotolo4niy6 жыл бұрын
Круто объясняешь, лайк
@KENISEG2 жыл бұрын
ээээх видосик не дожат до конца, я ждал развязки с той функцией\классом который "что бы не дублировать" вмял в себя методы фабрики. интересно было увидеть как манипулировать это функцией (аргументами?) типо foo(стулья) ? а как в коде указать что функция через фабрику должна стулья создавать?
@KENISEG2 жыл бұрын
и о почему нельзя костыль использовать, на аргумент подавать номерной int нужного типа, а в функции по кейсу указывать какого типа создать объект?)))))))))))))))))))
@SoBoL95005 жыл бұрын
Очень полезный урок. Я как раз изучаю паттерны более подробно. Но я не могу найти плейлист с паттернами на Вашем канале. Можете предоставить ссылку?
@DevPlayGame4 жыл бұрын
Да,реализацию посмотреть было бы круто!
@moonlight_shadow73963 жыл бұрын
11.37 ты обращаешься к методу абстрактного класса, у которого нет реализации?
@gsm7490 Жыл бұрын
Моднейшие паттерны тащемта. Чад кутежа, угар!
@antonbeton57388 жыл бұрын
Крутое видео, крутой канал. Как будет время все пересмотрю
@МаксимБайрамкулов6 жыл бұрын
Ахреневаю каждый раз когда натыкаюсь на его видео xd
@Federation13235 жыл бұрын
Меня много раз спрашивали, как меня зовут, и вот теперь я говорю во всеуслышание: меня зовут Володя! xDD Мне понравился видос!
@maksimvolkov88924 жыл бұрын
Отличное видео
@4everTHEbeatlemania8 жыл бұрын
Класс, всё доступно и понятно! Спасибо!
@Dippps5 жыл бұрын
А в дочерних классах метод с приставкой override или я не о том?
@ЮрийКлименко-к3щ2 жыл бұрын
6:20. Не очень понятно, почему в фабричный метод (foo в видео) нельзя передать непосредственно класс объекта, чтобы он создал и вернул объект этого класса. Зачем передавать еще один класс, который внутри будет делать то же самое? То есть на примере в видео передать в функцию foo не МФ Стульев, а Стул? Я пишу на Пайтоне и у нас классы это тоже объекты, и их можно передавать в функции. Возможно, что на других языках такой возможности нет, поэтому необходимо создавать объект фабрики?
@kvantstudio2 жыл бұрын
Я думаю тема не раскрыта. Я не понял ничего зачем мне на этапе компиляции не понимать какого типа создаётся обьект. Надо реальный пример рассматривать в коде видимо
@ЮрийКлименко-к3щ2 жыл бұрын
@@kvantstudio это то как раз понятно) допустим по логике программы пользователь должен выбрать создать стул или стол - на этапе компиляции мы не знаем выбор пользователя. И таких вариантов множество.
@alexxxyzzz2 жыл бұрын
@@kvantstudio Сила полиморфизма в том, что вы можете менять поведение объектов прямо в рантайме. Кому интересно можете загуглить "Динамическая диспетчеризация методов".
@lichlichi6 жыл бұрын
Где находится сам код результата выбора пользователем, это ведтка If'ов или что то ещё?
@Mykhailo-r6h4 жыл бұрын
Спасибо, круто!
@victorprohorov62012 жыл бұрын
А как мы знаем какой класс создавать? В функции будут какие то условия?
@VladimirMozhenkov2 жыл бұрын
Вы не создаёте фабричный метод если вы не знаете, что вы будете создавать. Вы понимаете, что вам надо что-то создать, и что обычный конструктор вам не подходит, и фабричный метод пишется для того, чтобы сделать то, что вам было нужно.
@victorprohorov62012 жыл бұрын
@@VladimirMozhenkov Теперь понятно, огромное спасибо!!!
@Пустойканал-з6я6 жыл бұрын
Спасибо большое!
@hmixa5 жыл бұрын
Надуманный пример, параллельное наследование вредно само по себе. Обычный статический метод возвращающий базовый класс и динамически решает instants какого типа создавать, например читая конфигурационые файлы. Ну или все-таки создать класс фабрику но не наследовать её, класс нужен просто для того если принятие решения по созданию Instants-а более сложное и не помещается в один метод. А так как товарищ предлагает это убивает всякую динамику, какую фабрику передали то и будет всегда создаваться. Смысл?
@johnwick83326 жыл бұрын
а могли бы сделать видео о реализации фабричного метода?! с++ или же с#
@sleepysundaymorning50346 жыл бұрын
Virtual - поле делающее класс абстрактным. Плюс в дочерних классах, для переопределения, надо использовать ключ. слово override
@hmixa5 жыл бұрын
virtual - это то что делает метод виртуальным а абстрактным его делает abstract ))))) как-то так. Есть разница между виртуальным и абстрактным. И не поле а метод или проперти. Поле не может быть абстрактым. Учите матчасть.
@vitaliisydorenko82268 жыл бұрын
Спасибо большое за ваш труд! У меня такой вопрос: Зачем создавать классы "СтулФаб" и "СтолФаб", почему не создать соответсвующие методы ("создатьСтул" и "создатьСтол") в классе "МебФаб"??? Например как в уроке про абстракную фабрику методы "создатьОкно" и "создать Меню".
@VladimirMozhenkov8 жыл бұрын
+Vitalii Sydorenko Это зависит от того, как вы собираетесь создавать эти объекты. Иногда один участок кода будет создавать Столы, а другой Столья, и если они работают совершенно поразному, то почему они должны использовать ту-же самую фабрику? То есть в этом случае здесь вопрос именно уровня абстракции.
@vitaliisydorenko82268 жыл бұрын
Я уже всё понял. Спасибо!
@ВладКалашников-м8п5 жыл бұрын
Спасибо!
@sergeybabiv25738 жыл бұрын
А если для создания различных подклассов, нужны разные входные переменные?
@SergeBalakir4 жыл бұрын
да, интересен пример на с++
@Вільний-к3б4 жыл бұрын
Христос воскрес
@alextopsite7 жыл бұрын
Хорошая тема
@kudokrasnodar4 жыл бұрын
Спасибо, очень помогло
@dsalodki4 жыл бұрын
создай плейлист по паттернам хотя бы, а то не нашёл больше ничего
@GlebHero8 жыл бұрын
7:55 норм затролел
@Blade_Ruiner3 жыл бұрын
Хмм. Мы задаем ему создать подкласс, но не знаем какой он создаст. Разве программирование не точная вещь, и не задается разработчиком всё всё всё? Т.е мы не знаем какой подкласс он создаст? Он разумный и сам выбирает? Я как новичок не понимаю просто. Там ни рандома, ни "шанса по процентам на то и на то". Я так понимаю, если нам надо создать подкласс. он не создаст его, если мы не укажем какой. Я пока понял, что если у кофемашины закинуть монетку и нажать заказать кофе, то он может выдать люой. а не тот, который мы выюерем нажав на кнопку.
@_Agent_Smith5 жыл бұрын
Верите ли вы в джаву?
@SerLansevRotZaza3 ай бұрын
А это нормально что я с 1раза понял что и зачем? Обычно часов пять пялюсь в монитор в полном очяянии и не понимании.
@ЭльнасАюпов6 жыл бұрын
Годно, абсолютно понятно
@Watamote3364 жыл бұрын
никак не пойму, про что еще в этом видео сказано помимо чисто динамического полиморфизма. Но лайкос поставил)
@ДмитрийГайдабура-ю5ь6 жыл бұрын
Извините, вы сказали "Но можно создать шаблон" я не совсем понял что за шаблон?
@expurple3 жыл бұрын
Вы уже скорее всего разобрались, но отвечу для остальных: имеется в виду template/generic (в разных языках по-разному называется)
@MrAirrussia8 жыл бұрын
Простите, а это случайно не полиморфизмом называется?
@VladimirMozhenkov8 жыл бұрын
+Алексей Вороненко Без полиморфизма фабричный метод работать не будет, но назвать фабричный метод полиморфизмом будет неверно.
@dzen12346 жыл бұрын
И где здесь метод, который конкретно фабричный ? Это ф-я, которая принимает параметром фабрики, или это методы фабрик ? Хорошо бы акцентировать. Мне этот ролик понравился (лайкнул), но я хочу чтобы мне ткнули пальцем в то, что здесь называется фабричным методом.
@arthurgoncharuk81939 жыл бұрын
этот подход вполне может сочетатся с прототипированием
@itsymphony8673 жыл бұрын
Купи себе большую дошку наконец то
@Ruslan__Ishmuratov2 жыл бұрын
Как скрипит доска 😬
@TheDron846 жыл бұрын
Чёт не зашло вообще.. ФМ нужен тогда, когда нам надо создать объект дочернего класса, но какой объект будет создаваться - мы не знаем. А зачем тогда создавать объект, который не известен на выходе? Что потом с ним делать? А если создаться объект не тот, что надо? Или мы не ожидали ничего конкретного на выходе, а просто - одно из? Ни вкисаю в смысл. Пойду смотреть/читать дальше эту тему.
@mishanjad23836 жыл бұрын
И что? Разобрался? Я тоже не понял зачем создавать объект непонятный на ходе... Кто решает какой объект нужен. Это же не квантовый компьютер...
@rainbowcake7606 жыл бұрын
Как это "создастся не тот" =) если ты передаешь объект конкретной фабрики в метод =) просто он должен реализовывать интерфейс МФ. Просто это сделано для того чтобы не перекидывать в методы гору разных объектов, вместо этого просто кинуть туда 1 фабрику которая даст тебе любой из этих объектов еще и динамически.
@sackeja6 жыл бұрын
До момента выполнения программы мы н е знаем. какой вид объекта нам по надобится создать ( B l oggsAppt E ncode r или MegaApp t Encode r } . • Мы должны иметь возможность достаточно просто добавлять новые типы объектов (например. следующее требование бизнеса - поддержка протокола SyncML}. • Каждый тип продукта связан с контекстом. который требует других специ ализированных операций ( g e t H e a d e r T e x t ( ) . ge t Fo o t e r T e x t ( ) ) . Кроме того. нужно отметить, что мы используем условные операторы. и мы уже видели, что их можно заменить полиморфизмом. Шаблон Factory Method позволяет использовать наследование и полиморфизм, чтобы инкапсулировать создание кон кретных продуктов. Другими словами, для каждого протокола создается свой под класс типа CommsMa nage r , в котором реализован свой метод g e t App t Encode r ( )
@kostyan1966 жыл бұрын
Ну , для примера, пользователь выбирает фильтр для ретуширования в "Фотошопе" . Следовательно он его будет выбирать в рантайме и создаваться он будет в рантайме.
@sleepysundaymorning50346 жыл бұрын
Очень сильно напоминает полиморфизм, та же схема
@hmixa5 жыл бұрын
Конечно, но это пример типичного использования полиморфизма но не единственное!
@pr0n1x28 жыл бұрын
Совершенно не понятно
@dmitriyshevchenko81886 жыл бұрын
там в начале он говорил, что изучите батенька наследование)
@SavageStyle776 жыл бұрын
Боже, Володя, ты похож на Иисуса - подстригись, бороду чуть короче можно и будешь круто выглядеть
@free1157 жыл бұрын
К сожалению уже в который раз убеждаюсь, что у настоящих программистов нет времени записывать видео.
@RedasGamesCom7 жыл бұрын
Очень не понятно обьясняешь, только запутал.
@babai56552 жыл бұрын
Может я тупой но абсолютно ничего не понял.
@asapdexter64103 жыл бұрын
полиморфизм
@zakharchuksergey48687 жыл бұрын
Непонятно! Увы!
@bubblesort63686 жыл бұрын
Полагаю уже поздно размахивать кулаками и вы уже выучили данный паттерн, но мне больше всего помог взгляд на реализацию. Стало прям сразу все ясно.