Фабричный метод - это паттерн программирования, позволяющий легко описать в одном участке кода, какие объекты следует создавать в другом.
Жүктеу.....
Пікірлер: 153
@user-sm4el8xh8g6 жыл бұрын
Сам Иисус учит нас паттернам :D
@loam
5 жыл бұрын
а после идет гулять по воде
@pymentor.
4 жыл бұрын
Аминь
@__alexfox__
4 жыл бұрын
=)))) Я первым делом так и подумал, Иисус тоже кодит!
@MrAbad202
3 жыл бұрын
@@__alexfox__, а утконос -- это баг?
@__alexfox__
3 жыл бұрын
@@MrAbad202 да не, это просто нужно было что-то по быстрому для замыкания пищевых цепочек замутить, взяли часть со старого проекта, а потом забыли и в прод залили... Вроде работает, не стали трогать.
@youxxxgun90015 жыл бұрын
Благодарю тебя, Отец Володимир)
@BagratS7 жыл бұрын
Я люблю этого парня. Просто шикарное объяснение. Спасибо большое.
@user-ow6dr9ok6c
Жыл бұрын
Да, _Уровень "красный"!
@Nikita041119918 жыл бұрын
Наконец то я нашел видеоуроки в которых объясняют паттерны понятным человеческим языком. Одного просмотра хватило чтобы всё стало ясно
@user-mf7dj6yw7q
2 жыл бұрын
А мне нет :с
@GlassedUA8 жыл бұрын
Батюшка преподает дизайн паттерны ? Хмм это же офигенно!
@nikolaiii3
6 жыл бұрын
Это не батюшка, это Шан-Тсунг. Глаза видел?
@user-lv9uz2hk2u
6 жыл бұрын
Не знаю почему, но я смеялся пол часа с этого комментария )))))))))))
@sergey-shalaev
5 жыл бұрын
Батюшка не батюшка, а разложил по полочкам всё как боженька
@loam
5 жыл бұрын
@@sergey-shalaev Ага, кашерно прям.
@hmixa
4 жыл бұрын
@@sergey-shalaev Бредово разложил если честно, почитайте мой комент.
@andyanderson2222 жыл бұрын
"Раз уж это русский язык, назову переменную Ж" - это было ОООЧЕНЬ многозначительно. В оценке ситуации с Вами полностью согласен)
@Ruslan_Ishmuratov
2 жыл бұрын
🤣🤣🤣🤣👍
@user-ow6dr9ok6c
Жыл бұрын
😁, тонко
@user-mh1mi4xv1h3 жыл бұрын
Потрясающе, почему не нахожу такого толкового объяснения нигде?! Большое спасибо
@athena60436 жыл бұрын
Спасибо за видео, Владимир. Надеюсь вы продолжите снимать ролики о паттернах.
@user-xd6mk4fp2l6 жыл бұрын
Самый лучший преподаватель, каких только уроков я не смотрел, всегда самые понятные и доходчивые у Volodya Mozhenkov
@user-ow6dr9ok6c
Жыл бұрын
+
@any3develop2826 жыл бұрын
Объяснил понятно . Главное придумать куда это прикрутить. Я понял что это нужно для будущего , чтобы можно было внести изменения и не затронуть работу программы.
@learnz13734 жыл бұрын
Полнедели понять не мог практическое применение. Спасибо. Огромное спасибо
@alexanderakhtyrtsev57764 жыл бұрын
Спасибо огромное за такое чёткое объяснение)
@brunkovsky8 жыл бұрын
Приятно слушать. Заметил, что Владимир не не делает разницы и не отдает предпочтение какому-либо языку программирования или операционной системе. По-моему, это признак мудрого человека.
@VladimirMozhenkov
8 жыл бұрын
+Stas Brunkovsky О, поверьте, у меня есть предпочтение и языка и операционной системе. Просто здесь я объясняю вещи, связанные с программировании вцелом.
@brunkovsky
8 жыл бұрын
+Vladimir Mozhenkov Ну да, как и у всех нас. Но не ставите на этом акцент. И, как мне показалось, уважительно относитесь к пользователям всех операционных систем и языков программирования. Благодаря тому, что рассказываете про общее, а не частное.
@user-cw4sc2le1q5 жыл бұрын
Привет из 2019го, огромное спасибо за разьяснение, в нашей студенчиской методичке все слишком заумно описано, а ваше видео сделано гараздо более доступно для понимания.
@infinityen7659
2 жыл бұрын
какой курс ?
@4everTHEbeatlemania8 жыл бұрын
Класс, всё доступно и понятно! Спасибо!
@antonbeton57387 жыл бұрын
Крутое видео, крутой канал. Как будет время все пересмотрю
@babai56552 жыл бұрын
Фабрика - это класс в котором задается фабричный метод создания продукта, который определяет стандартный вариант поведения. Затем он делегирует подробности создания подклассам. В принципе клиент не обязательно должен вызывать непосредственно метод "СоздатьМебель" Клиент может вызвать метод фабрики, фабрика выполнит стандартные действия - например, создаст накладные. А потом уже сама вызовет"СоздатьМебель" чтобы получить стол или стул.
@IIIA_KO2 жыл бұрын
6 лет назад вышел ролик, но полезно и сейчас
@valshin9 жыл бұрын
Спасибо за отличный урок, что такое фабрика знал давно, а вот зачем она нужна не совсем понимал. Теперь все предельно ясно.
@VladimirMozhenkov
9 жыл бұрын
Валерий Шинкаренко Видео про Абстрактную Фабрику уже выложил. Сейчас через 30 минут ещё будет про Простую фабрику. Тоже посмотрите.
@VladimirMozhenkov
9 жыл бұрын
kzread.info/dash/bejne/kWmalNysXZvLYJc.html
@user-im1iu5kr9s6 жыл бұрын
Первый раз слушала-не поняла. Потом почитала в статье про фабричный метод с примерами и второй раз просмотрев видео-все было понятно
@baron22727 ай бұрын
Отлично объясняете. Расскажите об использовании фабричного метода для вывода views в MVC проектах.
@kerrigan_katyakatya93773 жыл бұрын
Володя спасибо!
@RTPotolo4niy5 жыл бұрын
Круто объясняешь, лайк
@user-ow6dr9ok6c Жыл бұрын
Огромная вам благодарность, святой человек за свет..
@MyFearIsMyBlue Жыл бұрын
Круто. Экстравагантно, но доходчиво!
@Balkofag2 жыл бұрын
Спасибо за объяснение, лекция помогла
@user-sh6xn3qz1p Жыл бұрын
Супер!!! Спасибо!
@user-vt9ie4wl4w6 жыл бұрын
Спасибо большое!
@koroloff886 жыл бұрын
Самое лучшее объяснение!
@user-dn7nu6zq3n7 жыл бұрын
не совсем понял, с таким же успехом в такой матод может передаваться не фабрика и не стул или стол , но Мебель. Тогда мы сможем вызвать метод someMethod(мебель) с аргументами someMethod(стул) или someMethod(стол) и цель будет достигнута. Так же мебель может запросто быть интерфейсом, что еще более упростит работу, а стало быть пример не до конца объясняет, зачем нужна именно фабрика.
@yalauitarik
4 жыл бұрын
Плюс ко всему сказано, что класс МебФаб абстрактный и не может иметь свой объект, тогда как мы засовываем его в качестве аргумента в функцию foo(МебФаб МФ)
@igorbaglaev2496
4 жыл бұрын
@@yalauitarik поскольку СтулФаб и СтолФаб наследники МебФаб, то в foo(МебФаб мф) ты можешь подставлять СтулФаб и СтолФаб
@HerrHoldem
4 жыл бұрын
И как это должно выглядеть на практике? Хотите в Мебель засунуть реализацию создания другой мебели? Это не самое лучшее решение.
@xfg9183
3 жыл бұрын
Потому что этот шаблон все интерпретируют как угодно, но только не так как это задумывалось в GoF. Метод создМебель должен вызываться внутри МебФаб. То есть в МебФаб описывается некий алгоритм и внутри него вызывается метод создМебель. Кароче то что он пишет в функции foo, должно быть в МебФаб. Тогда всё очевидно. Это родственный шаблон к template method. В английской вики есть прекрасный пример реализации MazeGame где показывается верная интерпретация этого шаблона, но к сожалению там же полно и разных неверных вариантов не имеющих никакого отношения к GoF.
@youknowme9732
2 жыл бұрын
@@HerrHoldem Вики (рус. версия) Фабричный метод, примеры - "PHP5 современный вариант". Выполнена реализация фабричного метода в классе Animal (т.е. в Мебели). А дальше реализация без фабричного метода $class = "Lion"; (new $class)->voice(); Фабричный метод, кроме красивой записи нечего не дает.
@USER-GU4GJJURFGJKV5 жыл бұрын
А я то думал, куда Паук из коррозии подался? )))
@denislopatin31008 жыл бұрын
очень хорошо. Лично мне было бы как бонус реализация на Си примеров использования излагаемых Вами паттернов. Это не потому что не понятно через диаграммы и общие обозначение, это потому что через код лучше видно их возможное применения на практике. Спасибо за урок.
@Federation13234 жыл бұрын
Меня много раз спрашивали, как меня зовут, и вот теперь я говорю во всеуслышание: меня зовут Володя! xDD Мне понравился видос!
@user-mz7fg8ei7k4 жыл бұрын
14:51 даа! - это интересно, даа! - это нужно! даа! - примеры на с++ :)
@user-kh8zm3on2b3 жыл бұрын
Спасибо, круто!
@klev19837 жыл бұрын
Предлагаю в следующий раз создавать барную стойку и барный стул.
@SoBoL95004 жыл бұрын
Очень полезный урок. Я как раз изучаю паттерны более подробно. Но я не могу найти плейлист с паттернами на Вашем канале. Можете предоставить ссылку?
@user-qe6un8mn5m6 жыл бұрын
Годно, абсолютно понятно
@user-ql8uy2oq6b5 жыл бұрын
Ахреневаю каждый раз когда натыкаюсь на его видео xd
@user-hr7yc3qp8e5 жыл бұрын
Спасибо!
@bloodyink34232 жыл бұрын
Спасибо Вам
@DevPlayGame3 жыл бұрын
Да,реализацию посмотреть было бы круто!
@kudokrasnodar3 жыл бұрын
Спасибо, очень помогло
@sergeybabiv25738 жыл бұрын
А если для создания различных подклассов, нужны разные входные переменные?
@maksimvolkov88924 жыл бұрын
Отличное видео
@gsm7490 Жыл бұрын
Моднейшие паттерны тащемта. Чад кутежа, угар!
@alextopsite7 жыл бұрын
Хорошая тема
@user-rz2vb3vg2b9 ай бұрын
В чем разница между Фабричным методом и Dependency Injection? При инъекции зависимостей мы тоже передаем в конструктор класса A неизвестный объект B, реализующий определённый интерфейс. А потом можно исполнять в этом первом классе A сколько угодно методов A->foo1(), A->foo2(), ..., A->fooN(). Получается. что инъекция зависимостей это более сложный вариант фабричного метода?
@ne4to7777 жыл бұрын
Собственно, а как потом определяется тип мебели? Неполный урок, так как не описана проблема. Она, как бы констатируется, но не обосновывается.
@user-xj1fv7lk1z
7 жыл бұрын
Наследование учи. Какой объект передадут , тот и выберет компилятор
@user-kr2ff3xr3h
5 жыл бұрын
@@user-xj1fv7lk1z Володя сказал, что классы стул и стол обычно прячут, поэтому ты не сможешь эти объекты передать. Вот это и осталось непонятным в видео.
@AlexCSharp
5 жыл бұрын
@@user-kr2ff3xr3h Ты не можешь их создать НАПРЯМУЮ, это сделает за тебя фабрика. В этом и смысл.
@user-rz1bn3gl7q
4 жыл бұрын
@@AlexCSharp откуда фабрика узнает, что именно нужно создать?
@AlexCSharp
4 жыл бұрын
@@user-rz1bn3gl7q От запросившего, например. От настроек фабрики. От контекста зависит. Если тебе нужно создать пайплайн данных - тебе нужно будет лишь вызвать фабрику, все остальные обходимые для пайплайна объекты она создаст сама. Фабрик много, применений много. Читай "паттерны проектирования" Банды Четырёх.
@Dippps4 жыл бұрын
А в дочерних классах метод с приставкой override или я не о том?
@user-pg8ry1tm3t5 ай бұрын
шаблоны можно запрограммировать на динамическое поведение… в компайл-тайме
@GlebHero7 жыл бұрын
7:55 норм затролел
@spyphyfarnsworth60506 жыл бұрын
Если видео смотреть без звука, можно подумать, что инженер мебельной фабрики объясняет слесарям как правильно собирать стулья и столы.
@johntrucena4947
3 жыл бұрын
впрингципе так и есть
@kolob2043 жыл бұрын
Ох уж Этот взгляд :-) Кашпировский нервно курит в стороне.
@lichlichi6 жыл бұрын
Где находится сам код результата выбора пользователем, это ведтка If'ов или что то ещё?
@looklikethegodfather9 жыл бұрын
Хотелось бы увидеть пример на PHP
@Watamote3364 жыл бұрын
никак не пойму, про что еще в этом видео сказано помимо чисто динамического полиморфизма. Но лайкос поставил)
@moonlight_shadow73963 жыл бұрын
11.37 ты обращаешься к методу абстрактного класса, у которого нет реализации?
@user-ft8tq4iy9z4 жыл бұрын
да, интересен пример на с++
@sleepysundaymorning50346 жыл бұрын
Virtual - поле делающее класс абстрактным. Плюс в дочерних классах, для переопределения, надо использовать ключ. слово override
@hmixa
4 жыл бұрын
virtual - это то что делает метод виртуальным а абстрактным его делает abstract ))))) как-то так. Есть разница между виртуальным и абстрактным. И не поле а метод или проперти. Поле не может быть абстрактым. Учите матчасть.
@johnwick83326 жыл бұрын
а могли бы сделать видео о реализации фабричного метода?! с++ или же с#
@vitaliisydorenko82268 жыл бұрын
Спасибо большое за ваш труд! У меня такой вопрос: Зачем создавать классы "СтулФаб" и "СтолФаб", почему не создать соответсвующие методы ("создатьСтул" и "создатьСтол") в классе "МебФаб"??? Например как в уроке про абстракную фабрику методы "создатьОкно" и "создать Меню".
@VladimirMozhenkov
8 жыл бұрын
+Vitalii Sydorenko Это зависит от того, как вы собираетесь создавать эти объекты. Иногда один участок кода будет создавать Столы, а другой Столья, и если они работают совершенно поразному, то почему они должны использовать ту-же самую фабрику? То есть в этом случае здесь вопрос именно уровня абстракции.
@vitaliisydorenko8226
8 жыл бұрын
Я уже всё понял. Спасибо!
@KENISEG Жыл бұрын
ээээх видосик не дожат до конца, я ждал развязки с той функцией\классом который "что бы не дублировать" вмял в себя методы фабрики. интересно было увидеть как манипулировать это функцией (аргументами?) типо foo(стулья) ? а как в коде указать что функция через фабрику должна стулья создавать?
@KENISEG
Жыл бұрын
и о почему нельзя костыль использовать, на аргумент подавать номерной int нужного типа, а в функции по кейсу указывать какого типа создать объект?)))))))))))))))))))
@user-xq2ng2cu3d6 жыл бұрын
Извините, вы сказали "Но можно создать шаблон" я не совсем понял что за шаблон?
@expurple
3 жыл бұрын
Вы уже скорее всего разобрались, но отвечу для остальных: имеется в виду template/generic (в разных языках по-разному называется)
@user-ni3ui6jy5y3 жыл бұрын
Христос воскрес
@dsalodki4 жыл бұрын
создай плейлист по паттернам хотя бы, а то не нашёл больше ничего
@hmixa4 жыл бұрын
Надуманный пример, параллельное наследование вредно само по себе. Обычный статический метод возвращающий базовый класс и динамически решает instants какого типа создавать, например читая конфигурационые файлы. Ну или все-таки создать класс фабрику но не наследовать её, класс нужен просто для того если принятие решения по созданию Instants-а более сложное и не помещается в один метод. А так как товарищ предлагает это убивает всякую динамику, какую фабрику передали то и будет всегда создаваться. Смысл?
@user-jd4rl7im6d Жыл бұрын
6:20. Не очень понятно, почему в фабричный метод (foo в видео) нельзя передать непосредственно класс объекта, чтобы он создал и вернул объект этого класса. Зачем передавать еще один класс, который внутри будет делать то же самое? То есть на примере в видео передать в функцию foo не МФ Стульев, а Стул? Я пишу на Пайтоне и у нас классы это тоже объекты, и их можно передавать в функции. Возможно, что на других языках такой возможности нет, поэтому необходимо создавать объект фабрики?
@kvantstudio
Жыл бұрын
Я думаю тема не раскрыта. Я не понял ничего зачем мне на этапе компиляции не понимать какого типа создаётся обьект. Надо реальный пример рассматривать в коде видимо
@user-jd4rl7im6d
Жыл бұрын
@@kvantstudio это то как раз понятно) допустим по логике программы пользователь должен выбрать создать стул или стол - на этапе компиляции мы не знаем выбор пользователя. И таких вариантов множество.
@alexxxyzzz
Жыл бұрын
@@kvantstudio Сила полиморфизма в том, что вы можете менять поведение объектов прямо в рантайме. Кому интересно можете загуглить "Динамическая диспетчеризация методов".
@victorprohorov62012 жыл бұрын
А как мы знаем какой класс создавать? В функции будут какие то условия?
@VladimirMozhenkov
2 жыл бұрын
Вы не создаёте фабричный метод если вы не знаете, что вы будете создавать. Вы понимаете, что вам надо что-то создать, и что обычный конструктор вам не подходит, и фабричный метод пишется для того, чтобы сделать то, что вам было нужно.
@victorprohorov6201
2 жыл бұрын
@@VladimirMozhenkov Теперь понятно, огромное спасибо!!!
@dzen12346 жыл бұрын
И где здесь метод, который конкретно фабричный ? Это ф-я, которая принимает параметром фабрики, или это методы фабрик ? Хорошо бы акцентировать. Мне этот ролик понравился (лайкнул), но я хочу чтобы мне ткнули пальцем в то, что здесь называется фабричным методом.
@_Agent_Smith5 жыл бұрын
Верите ли вы в джаву?
@itsymphony8673 жыл бұрын
Купи себе большую дошку наконец то
@Blade_Ruiner2 жыл бұрын
Хмм. Мы задаем ему создать подкласс, но не знаем какой он создаст. Разве программирование не точная вещь, и не задается разработчиком всё всё всё? Т.е мы не знаем какой подкласс он создаст? Он разумный и сам выбирает? Я как новичок не понимаю просто. Там ни рандома, ни "шанса по процентам на то и на то". Я так понимаю, если нам надо создать подкласс. он не создаст его, если мы не укажем какой. Я пока понял, что если у кофемашины закинуть монетку и нажать заказать кофе, то он может выдать люой. а не тот, который мы выюерем нажав на кнопку.
@MrAirrussia8 жыл бұрын
Простите, а это случайно не полиморфизмом называется?
@VladimirMozhenkov
8 жыл бұрын
+Алексей Вороненко Без полиморфизма фабричный метод работать не будет, но назвать фабричный метод полиморфизмом будет неверно.
@arthurgoncharuk81939 жыл бұрын
этот подход вполне может сочетатся с прототипированием
@SavageStyle776 жыл бұрын
Боже, Володя, ты похож на Иисуса - подстригись, бороду чуть короче можно и будешь круто выглядеть
@sleepysundaymorning50346 жыл бұрын
Очень сильно напоминает полиморфизм, та же схема
@hmixa
4 жыл бұрын
Конечно, но это пример типичного использования полиморфизма но не единственное!
@TheDron846 жыл бұрын
Чёт не зашло вообще.. ФМ нужен тогда, когда нам надо создать объект дочернего класса, но какой объект будет создаваться - мы не знаем. А зачем тогда создавать объект, который не известен на выходе? Что потом с ним делать? А если создаться объект не тот, что надо? Или мы не ожидали ничего конкретного на выходе, а просто - одно из? Ни вкисаю в смысл. Пойду смотреть/читать дальше эту тему.
@mishanjad2383
6 жыл бұрын
И что? Разобрался? Я тоже не понял зачем создавать объект непонятный на ходе... Кто решает какой объект нужен. Это же не квантовый компьютер...
@rainbowcake760
6 жыл бұрын
Как это "создастся не тот" =) если ты передаешь объект конкретной фабрики в метод =) просто он должен реализовывать интерфейс МФ. Просто это сделано для того чтобы не перекидывать в методы гору разных объектов, вместо этого просто кинуть туда 1 фабрику которая даст тебе любой из этих объектов еще и динамически.
@sackeja
5 жыл бұрын
До момента выполнения программы мы н е знаем. какой вид объекта нам по надобится создать ( 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 ( )
@kostyan196
5 жыл бұрын
Ну , для примера, пользователь выбирает фильтр для ретуширования в "Фотошопе" . Следовательно он его будет выбирать в рантайме и создаваться он будет в рантайме.
@asapdexter64103 жыл бұрын
полиморфизм
@Ruslan_Ishmuratov2 жыл бұрын
Как скрипит доска 😬
@free1157 жыл бұрын
К сожалению уже в который раз убеждаюсь, что у настоящих программистов нет времени записывать видео.
@pr0n1x28 жыл бұрын
Совершенно не понятно
@dmitriyshevchenko8188
5 жыл бұрын
там в начале он говорил, что изучите батенька наследование)
@skynowa26267 жыл бұрын
1С программирование
@zakharchuksergey48687 жыл бұрын
Непонятно! Увы!
@bubblesort6368
6 жыл бұрын
Полагаю уже поздно размахивать кулаками и вы уже выучили данный паттерн, но мне больше всего помог взгляд на реализацию. Стало прям сразу все ясно.
Пікірлер: 153
Сам Иисус учит нас паттернам :D
@loam
5 жыл бұрын
а после идет гулять по воде
@pymentor.
4 жыл бұрын
Аминь
@__alexfox__
4 жыл бұрын
=)))) Я первым делом так и подумал, Иисус тоже кодит!
@MrAbad202
3 жыл бұрын
@@__alexfox__, а утконос -- это баг?
@__alexfox__
3 жыл бұрын
@@MrAbad202 да не, это просто нужно было что-то по быстрому для замыкания пищевых цепочек замутить, взяли часть со старого проекта, а потом забыли и в прод залили... Вроде работает, не стали трогать.
Благодарю тебя, Отец Володимир)
Я люблю этого парня. Просто шикарное объяснение. Спасибо большое.
@user-ow6dr9ok6c
Жыл бұрын
Да, _Уровень "красный"!
Наконец то я нашел видеоуроки в которых объясняют паттерны понятным человеческим языком. Одного просмотра хватило чтобы всё стало ясно
@user-mf7dj6yw7q
2 жыл бұрын
А мне нет :с
Батюшка преподает дизайн паттерны ? Хмм это же офигенно!
@nikolaiii3
6 жыл бұрын
Это не батюшка, это Шан-Тсунг. Глаза видел?
@user-lv9uz2hk2u
6 жыл бұрын
Не знаю почему, но я смеялся пол часа с этого комментария )))))))))))
@sergey-shalaev
5 жыл бұрын
Батюшка не батюшка, а разложил по полочкам всё как боженька
@loam
5 жыл бұрын
@@sergey-shalaev Ага, кашерно прям.
@hmixa
4 жыл бұрын
@@sergey-shalaev Бредово разложил если честно, почитайте мой комент.
"Раз уж это русский язык, назову переменную Ж" - это было ОООЧЕНЬ многозначительно. В оценке ситуации с Вами полностью согласен)
@Ruslan_Ishmuratov
2 жыл бұрын
🤣🤣🤣🤣👍
@user-ow6dr9ok6c
Жыл бұрын
😁, тонко
Потрясающе, почему не нахожу такого толкового объяснения нигде?! Большое спасибо
Спасибо за видео, Владимир. Надеюсь вы продолжите снимать ролики о паттернах.
Самый лучший преподаватель, каких только уроков я не смотрел, всегда самые понятные и доходчивые у Volodya Mozhenkov
@user-ow6dr9ok6c
Жыл бұрын
+
Объяснил понятно . Главное придумать куда это прикрутить. Я понял что это нужно для будущего , чтобы можно было внести изменения и не затронуть работу программы.
Полнедели понять не мог практическое применение. Спасибо. Огромное спасибо
Спасибо огромное за такое чёткое объяснение)
Приятно слушать. Заметил, что Владимир не не делает разницы и не отдает предпочтение какому-либо языку программирования или операционной системе. По-моему, это признак мудрого человека.
@VladimirMozhenkov
8 жыл бұрын
+Stas Brunkovsky О, поверьте, у меня есть предпочтение и языка и операционной системе. Просто здесь я объясняю вещи, связанные с программировании вцелом.
@brunkovsky
8 жыл бұрын
+Vladimir Mozhenkov Ну да, как и у всех нас. Но не ставите на этом акцент. И, как мне показалось, уважительно относитесь к пользователям всех операционных систем и языков программирования. Благодаря тому, что рассказываете про общее, а не частное.
Привет из 2019го, огромное спасибо за разьяснение, в нашей студенчиской методичке все слишком заумно описано, а ваше видео сделано гараздо более доступно для понимания.
@infinityen7659
2 жыл бұрын
какой курс ?
Класс, всё доступно и понятно! Спасибо!
Крутое видео, крутой канал. Как будет время все пересмотрю
Фабрика - это класс в котором задается фабричный метод создания продукта, который определяет стандартный вариант поведения. Затем он делегирует подробности создания подклассам. В принципе клиент не обязательно должен вызывать непосредственно метод "СоздатьМебель" Клиент может вызвать метод фабрики, фабрика выполнит стандартные действия - например, создаст накладные. А потом уже сама вызовет"СоздатьМебель" чтобы получить стол или стул.
6 лет назад вышел ролик, но полезно и сейчас
Спасибо за отличный урок, что такое фабрика знал давно, а вот зачем она нужна не совсем понимал. Теперь все предельно ясно.
@VladimirMozhenkov
9 жыл бұрын
Валерий Шинкаренко Видео про Абстрактную Фабрику уже выложил. Сейчас через 30 минут ещё будет про Простую фабрику. Тоже посмотрите.
@VladimirMozhenkov
9 жыл бұрын
kzread.info/dash/bejne/kWmalNysXZvLYJc.html
Первый раз слушала-не поняла. Потом почитала в статье про фабричный метод с примерами и второй раз просмотрев видео-все было понятно
Отлично объясняете. Расскажите об использовании фабричного метода для вывода views в MVC проектах.
Володя спасибо!
Круто объясняешь, лайк
Огромная вам благодарность, святой человек за свет..
Круто. Экстравагантно, но доходчиво!
Спасибо за объяснение, лекция помогла
Супер!!! Спасибо!
Спасибо большое!
Самое лучшее объяснение!
не совсем понял, с таким же успехом в такой матод может передаваться не фабрика и не стул или стол , но Мебель. Тогда мы сможем вызвать метод someMethod(мебель) с аргументами someMethod(стул) или someMethod(стол) и цель будет достигнута. Так же мебель может запросто быть интерфейсом, что еще более упростит работу, а стало быть пример не до конца объясняет, зачем нужна именно фабрика.
@yalauitarik
4 жыл бұрын
Плюс ко всему сказано, что класс МебФаб абстрактный и не может иметь свой объект, тогда как мы засовываем его в качестве аргумента в функцию foo(МебФаб МФ)
@igorbaglaev2496
4 жыл бұрын
@@yalauitarik поскольку СтулФаб и СтолФаб наследники МебФаб, то в foo(МебФаб мф) ты можешь подставлять СтулФаб и СтолФаб
@HerrHoldem
4 жыл бұрын
И как это должно выглядеть на практике? Хотите в Мебель засунуть реализацию создания другой мебели? Это не самое лучшее решение.
@xfg9183
3 жыл бұрын
Потому что этот шаблон все интерпретируют как угодно, но только не так как это задумывалось в GoF. Метод создМебель должен вызываться внутри МебФаб. То есть в МебФаб описывается некий алгоритм и внутри него вызывается метод создМебель. Кароче то что он пишет в функции foo, должно быть в МебФаб. Тогда всё очевидно. Это родственный шаблон к template method. В английской вики есть прекрасный пример реализации MazeGame где показывается верная интерпретация этого шаблона, но к сожалению там же полно и разных неверных вариантов не имеющих никакого отношения к GoF.
@youknowme9732
2 жыл бұрын
@@HerrHoldem Вики (рус. версия) Фабричный метод, примеры - "PHP5 современный вариант". Выполнена реализация фабричного метода в классе Animal (т.е. в Мебели). А дальше реализация без фабричного метода $class = "Lion"; (new $class)->voice(); Фабричный метод, кроме красивой записи нечего не дает.
А я то думал, куда Паук из коррозии подался? )))
очень хорошо. Лично мне было бы как бонус реализация на Си примеров использования излагаемых Вами паттернов. Это не потому что не понятно через диаграммы и общие обозначение, это потому что через код лучше видно их возможное применения на практике. Спасибо за урок.
Меня много раз спрашивали, как меня зовут, и вот теперь я говорю во всеуслышание: меня зовут Володя! xDD Мне понравился видос!
14:51 даа! - это интересно, даа! - это нужно! даа! - примеры на с++ :)
Спасибо, круто!
Предлагаю в следующий раз создавать барную стойку и барный стул.
Очень полезный урок. Я как раз изучаю паттерны более подробно. Но я не могу найти плейлист с паттернами на Вашем канале. Можете предоставить ссылку?
Годно, абсолютно понятно
Ахреневаю каждый раз когда натыкаюсь на его видео xd
Спасибо!
Спасибо Вам
Да,реализацию посмотреть было бы круто!
Спасибо, очень помогло
А если для создания различных подклассов, нужны разные входные переменные?
Отличное видео
Моднейшие паттерны тащемта. Чад кутежа, угар!
Хорошая тема
В чем разница между Фабричным методом и Dependency Injection? При инъекции зависимостей мы тоже передаем в конструктор класса A неизвестный объект B, реализующий определённый интерфейс. А потом можно исполнять в этом первом классе A сколько угодно методов A->foo1(), A->foo2(), ..., A->fooN(). Получается. что инъекция зависимостей это более сложный вариант фабричного метода?
Собственно, а как потом определяется тип мебели? Неполный урок, так как не описана проблема. Она, как бы констатируется, но не обосновывается.
@user-xj1fv7lk1z
7 жыл бұрын
Наследование учи. Какой объект передадут , тот и выберет компилятор
@user-kr2ff3xr3h
5 жыл бұрын
@@user-xj1fv7lk1z Володя сказал, что классы стул и стол обычно прячут, поэтому ты не сможешь эти объекты передать. Вот это и осталось непонятным в видео.
@AlexCSharp
5 жыл бұрын
@@user-kr2ff3xr3h Ты не можешь их создать НАПРЯМУЮ, это сделает за тебя фабрика. В этом и смысл.
@user-rz1bn3gl7q
4 жыл бұрын
@@AlexCSharp откуда фабрика узнает, что именно нужно создать?
@AlexCSharp
4 жыл бұрын
@@user-rz1bn3gl7q От запросившего, например. От настроек фабрики. От контекста зависит. Если тебе нужно создать пайплайн данных - тебе нужно будет лишь вызвать фабрику, все остальные обходимые для пайплайна объекты она создаст сама. Фабрик много, применений много. Читай "паттерны проектирования" Банды Четырёх.
А в дочерних классах метод с приставкой override или я не о том?
шаблоны можно запрограммировать на динамическое поведение… в компайл-тайме
7:55 норм затролел
Если видео смотреть без звука, можно подумать, что инженер мебельной фабрики объясняет слесарям как правильно собирать стулья и столы.
@johntrucena4947
3 жыл бұрын
впрингципе так и есть
Ох уж Этот взгляд :-) Кашпировский нервно курит в стороне.
Где находится сам код результата выбора пользователем, это ведтка If'ов или что то ещё?
Хотелось бы увидеть пример на PHP
никак не пойму, про что еще в этом видео сказано помимо чисто динамического полиморфизма. Но лайкос поставил)
11.37 ты обращаешься к методу абстрактного класса, у которого нет реализации?
да, интересен пример на с++
Virtual - поле делающее класс абстрактным. Плюс в дочерних классах, для переопределения, надо использовать ключ. слово override
@hmixa
4 жыл бұрын
virtual - это то что делает метод виртуальным а абстрактным его делает abstract ))))) как-то так. Есть разница между виртуальным и абстрактным. И не поле а метод или проперти. Поле не может быть абстрактым. Учите матчасть.
а могли бы сделать видео о реализации фабричного метода?! с++ или же с#
Спасибо большое за ваш труд! У меня такой вопрос: Зачем создавать классы "СтулФаб" и "СтолФаб", почему не создать соответсвующие методы ("создатьСтул" и "создатьСтол") в классе "МебФаб"??? Например как в уроке про абстракную фабрику методы "создатьОкно" и "создать Меню".
@VladimirMozhenkov
8 жыл бұрын
+Vitalii Sydorenko Это зависит от того, как вы собираетесь создавать эти объекты. Иногда один участок кода будет создавать Столы, а другой Столья, и если они работают совершенно поразному, то почему они должны использовать ту-же самую фабрику? То есть в этом случае здесь вопрос именно уровня абстракции.
@vitaliisydorenko8226
8 жыл бұрын
Я уже всё понял. Спасибо!
ээээх видосик не дожат до конца, я ждал развязки с той функцией\классом который "что бы не дублировать" вмял в себя методы фабрики. интересно было увидеть как манипулировать это функцией (аргументами?) типо foo(стулья) ? а как в коде указать что функция через фабрику должна стулья создавать?
@KENISEG
Жыл бұрын
и о почему нельзя костыль использовать, на аргумент подавать номерной int нужного типа, а в функции по кейсу указывать какого типа создать объект?)))))))))))))))))))
Извините, вы сказали "Но можно создать шаблон" я не совсем понял что за шаблон?
@expurple
3 жыл бұрын
Вы уже скорее всего разобрались, но отвечу для остальных: имеется в виду template/generic (в разных языках по-разному называется)
Христос воскрес
создай плейлист по паттернам хотя бы, а то не нашёл больше ничего
Надуманный пример, параллельное наследование вредно само по себе. Обычный статический метод возвращающий базовый класс и динамически решает instants какого типа создавать, например читая конфигурационые файлы. Ну или все-таки создать класс фабрику но не наследовать её, класс нужен просто для того если принятие решения по созданию Instants-а более сложное и не помещается в один метод. А так как товарищ предлагает это убивает всякую динамику, какую фабрику передали то и будет всегда создаваться. Смысл?
6:20. Не очень понятно, почему в фабричный метод (foo в видео) нельзя передать непосредственно класс объекта, чтобы он создал и вернул объект этого класса. Зачем передавать еще один класс, который внутри будет делать то же самое? То есть на примере в видео передать в функцию foo не МФ Стульев, а Стул? Я пишу на Пайтоне и у нас классы это тоже объекты, и их можно передавать в функции. Возможно, что на других языках такой возможности нет, поэтому необходимо создавать объект фабрики?
@kvantstudio
Жыл бұрын
Я думаю тема не раскрыта. Я не понял ничего зачем мне на этапе компиляции не понимать какого типа создаётся обьект. Надо реальный пример рассматривать в коде видимо
@user-jd4rl7im6d
Жыл бұрын
@@kvantstudio это то как раз понятно) допустим по логике программы пользователь должен выбрать создать стул или стол - на этапе компиляции мы не знаем выбор пользователя. И таких вариантов множество.
@alexxxyzzz
Жыл бұрын
@@kvantstudio Сила полиморфизма в том, что вы можете менять поведение объектов прямо в рантайме. Кому интересно можете загуглить "Динамическая диспетчеризация методов".
А как мы знаем какой класс создавать? В функции будут какие то условия?
@VladimirMozhenkov
2 жыл бұрын
Вы не создаёте фабричный метод если вы не знаете, что вы будете создавать. Вы понимаете, что вам надо что-то создать, и что обычный конструктор вам не подходит, и фабричный метод пишется для того, чтобы сделать то, что вам было нужно.
@victorprohorov6201
2 жыл бұрын
@@VladimirMozhenkov Теперь понятно, огромное спасибо!!!
И где здесь метод, который конкретно фабричный ? Это ф-я, которая принимает параметром фабрики, или это методы фабрик ? Хорошо бы акцентировать. Мне этот ролик понравился (лайкнул), но я хочу чтобы мне ткнули пальцем в то, что здесь называется фабричным методом.
Верите ли вы в джаву?
Купи себе большую дошку наконец то
Хмм. Мы задаем ему создать подкласс, но не знаем какой он создаст. Разве программирование не точная вещь, и не задается разработчиком всё всё всё? Т.е мы не знаем какой подкласс он создаст? Он разумный и сам выбирает? Я как новичок не понимаю просто. Там ни рандома, ни "шанса по процентам на то и на то". Я так понимаю, если нам надо создать подкласс. он не создаст его, если мы не укажем какой. Я пока понял, что если у кофемашины закинуть монетку и нажать заказать кофе, то он может выдать люой. а не тот, который мы выюерем нажав на кнопку.
Простите, а это случайно не полиморфизмом называется?
@VladimirMozhenkov
8 жыл бұрын
+Алексей Вороненко Без полиморфизма фабричный метод работать не будет, но назвать фабричный метод полиморфизмом будет неверно.
этот подход вполне может сочетатся с прототипированием
Боже, Володя, ты похож на Иисуса - подстригись, бороду чуть короче можно и будешь круто выглядеть
Очень сильно напоминает полиморфизм, та же схема
@hmixa
4 жыл бұрын
Конечно, но это пример типичного использования полиморфизма но не единственное!
Чёт не зашло вообще.. ФМ нужен тогда, когда нам надо создать объект дочернего класса, но какой объект будет создаваться - мы не знаем. А зачем тогда создавать объект, который не известен на выходе? Что потом с ним делать? А если создаться объект не тот, что надо? Или мы не ожидали ничего конкретного на выходе, а просто - одно из? Ни вкисаю в смысл. Пойду смотреть/читать дальше эту тему.
@mishanjad2383
6 жыл бұрын
И что? Разобрался? Я тоже не понял зачем создавать объект непонятный на ходе... Кто решает какой объект нужен. Это же не квантовый компьютер...
@rainbowcake760
6 жыл бұрын
Как это "создастся не тот" =) если ты передаешь объект конкретной фабрики в метод =) просто он должен реализовывать интерфейс МФ. Просто это сделано для того чтобы не перекидывать в методы гору разных объектов, вместо этого просто кинуть туда 1 фабрику которая даст тебе любой из этих объектов еще и динамически.
@sackeja
5 жыл бұрын
До момента выполнения программы мы н е знаем. какой вид объекта нам по надобится создать ( 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 ( )
@kostyan196
5 жыл бұрын
Ну , для примера, пользователь выбирает фильтр для ретуширования в "Фотошопе" . Следовательно он его будет выбирать в рантайме и создаваться он будет в рантайме.
полиморфизм
Как скрипит доска 😬
К сожалению уже в который раз убеждаюсь, что у настоящих программистов нет времени записывать видео.
Совершенно не понятно
@dmitriyshevchenko8188
5 жыл бұрын
там в начале он говорил, что изучите батенька наследование)
1С программирование
Непонятно! Увы!
@bubblesort6368
6 жыл бұрын
Полагаю уже поздно размахивать кулаками и вы уже выучили данный паттерн, но мне больше всего помог взгляд на реализацию. Стало прям сразу все ясно.
Очень не понятно обьясняешь, только запутал.
фабрика::купитьДоску();
Непонятно
До свидания Володя
Так нифига и не понял... ((
Может я тупой но абсолютно ничего не понял.
дайте ему 10 р на церковь
Привет, пострижися
у тебя талант почти обьяснять
много лишнено текста, почти Володя