Шаблоны Java. Делегат (Delegate)

แชร์
ฝัง
  • เผยแพร่เมื่อ 31 ธ.ค. 2024

ความคิดเห็น • 84

  • @notUnclePetro
    @notUnclePetro 7 ปีที่แล้ว +12

    Сам того не ведая шикарным образом объяснил идею *полиморфизма*
    Круто!

  • @АндрійКаракой
    @АндрійКаракой 8 ปีที่แล้ว +21

    Дякую таким людям, які так легко все показують і розказують. Тепер не треба читати море інфи, щоб розібратись з кожним із патернів. Задумка чудова. Величезне дякую )))

    • @raymints9583
      @raymints9583 6 ปีที่แล้ว +1

      Можеш ще тут подивитися:th-cam.com/video/aKbSlgi5h68/w-d-xo.html або тут: th-cam.com/video/vNHpsC5ng_E/w-d-xo.html

  • @Gretanit
    @Gretanit ปีที่แล้ว +1

    8 лет назад, карл. всё еще пригождается людям!

  • @Juan-zw8hy
    @Juan-zw8hy 7 ปีที่แล้ว +10

    Внутри каждого официанта живет маленький повар.

  • @sanchoroz2
    @sanchoroz2 8 ปีที่แล้ว +16

    Отличное объяснение, спасибо!

    • @programm4you
      @programm4you  8 ปีที่แล้ว +7

      Йо, на здоровье, скоро еще будет))

  • @jacobmmm8260
    @jacobmmm8260 5 ปีที่แล้ว

    +9999999999999 лайков за то что нет в видосе рекламы + понятное объяснение. Спасибо за видео:)

  • @dmytrokubyshev3242
    @dmytrokubyshev3242 8 ปีที่แล้ว +1

    Просто супер, очень рад что нашел Ваш канал! Спасибо огромное!

  • @MultiMrBlock
    @MultiMrBlock 5 ปีที่แล้ว

    Хороший пример, автор объясняет все доходчиво. Спасибо

  • @svetlanamazhaykina6918
    @svetlanamazhaykina6918 3 ปีที่แล้ว

    Спасибо за Ваш труд! Здоровья Вам процветания!

  • @olegkhilko2339
    @olegkhilko2339 2 ปีที่แล้ว

    Не, в конце пример с кафе это больше про команду и взаимодействие посетителя-официанта-повара. Это из Head First и он у них просто шикарно описан

  • @igorshaula9097
    @igorshaula9097 8 ปีที่แล้ว +2

    спасибо! в принципе, лучше было сразу юзать пример официанта. а вообще очень доступно поясняете! :)

  • @olksndear
    @olksndear 3 ปีที่แล้ว

    Спаибо за видео, довольно доходчиво)
    Про коктейльщика в голос))

  • @katarina2379
    @katarina2379 8 ปีที่แล้ว +3

    Спасибо, объяснение хорошее. Только больно оторвано от реальности.
    Можно было рассказать о практическом применении шаблона, для вызова событий, например. Конечно об этом было вскользь упомянуто про c#, но можно было примером кода на java показать.
    Буду смотреть дальше, надеюсь, будет больше примеров из "жизни" программистов ))

  • @АлександрНиколаев-ъ5л9м
    @АлександрНиколаев-ъ5л9м 5 ปีที่แล้ว

    Очень доходчиво! Благодарю за урок!

  • @IT-no1wi
    @IT-no1wi 8 ปีที่แล้ว

    Шикарный урок! Спасибо огромное!

  • @kostyas3
    @kostyas3 8 ปีที่แล้ว +16

    А ведь тут по сути и сам painter является реализацией graphics. Почему б тогда не сделать void draw(Graphics g){ g.draw() }

    • @off6797
      @off6797 7 ปีที่แล้ว

      Могу ошибиться, но ваш пример это уже почти паттерн "прокси". То есть клиент юзает обьект, унаследованный от неткорого интрефейса, а он в свою очередь юзает другой обьект, НО тоже унаследованный от этого же интрефейса.

    • @dimkafnn
      @dimkafnn 3 ปีที่แล้ว

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

  • @andreyandreev2639
    @andreyandreev2639 5 ปีที่แล้ว

    уже 2019, офигенное видео, огромное спасибо

  • @diakonrai8472
    @diakonrai8472 7 ปีที่แล้ว +1

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

  • @_AnOrdinaryPerson
    @_AnOrdinaryPerson 3 ปีที่แล้ว

    Что делать если например если несколько классов у которых есть похожие методы, но одни из них принимают аргумент, а другие нет? Если шаблон Command, мне показалось, что он ровно про то же, что и Delegate. Но в моей программе есть команды которые принимают какой-то объект и есть те, что работают без агрумента. Как в этом случае быть?

  • @scZooK
    @scZooK 9 ปีที่แล้ว +2

    Спасибо за урок!

  • @faniskhalikov9736
    @faniskhalikov9736 2 ปีที่แล้ว

    Отлично! Спасибо, лайк и подписка )

  • @andreygazhala7577
    @andreygazhala7577 7 ปีที่แล้ว

    Спасибо! С первого раза понял!

  • @МихаилНовиков-р6ч
    @МихаилНовиков-р6ч 3 ปีที่แล้ว

    А почему нельзя в классе Painter сделать метод draw(Graphics g) { g.draw; }? И в клиенте сразу обращаться painter.draw(new Square);?

  • @sadstill
    @sadstill ปีที่แล้ว

    а разве последний пример не является полиморфизмом?

  • @oleksandr-petrovych
    @oleksandr-petrovych 8 ปีที่แล้ว +5

    Чем "Делегат" отличается от "Стратегии" ?

    • @eugene8863
      @eugene8863 5 ปีที่แล้ว +4

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

    • @kek_pupold
      @kek_pupold 5 ปีที่แล้ว

      @@eugene8863 ахахах, поваренка

    • @eugene8863
      @eugene8863 5 ปีที่แล้ว

      @@kek_pupold ну эт такой младший работник кухни. Хотя возможно нет, я далёк от общепита.

    • @Alex11Fox
      @Alex11Fox 5 ปีที่แล้ว +1

      В многих книгах паттерна Делегат не существует, это просто принцип проектирование "делегирование" а не паттерн "Делегирование". А на видео просто описан паттерн Стратегия.

  • @vinsler
    @vinsler 6 ปีที่แล้ว

    Первый пример наглядный и простой и понятный. Во-втором ковариантность, попробуй объясни каким образом получилось передача интерфейса, который знает только названия без реализации в потомка? ))) Т.е. при передачи интерфейса, в более абстрактный тип кладется более конкретный, это классическая ковариантность. ))) Без этого понимания вся логика просто теряется, почему об этом не сказано, не знаю, это совсем не очевидно.

  • @melomanteam1852
    @melomanteam1852 7 ปีที่แล้ว +1

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

  • @managerinfo3358
    @managerinfo3358 2 ปีที่แล้ว

    Да, это принцип ООП - полиморфизм. Теперь знаю, что это - паттерн делегат.

  • @javagraf2753
    @javagraf2753 8 ปีที่แล้ว

    автор, твои уроки просто космос, только у меня вопрос : Почему нельзя было сразу в методе setGraphics на объекте "g" вызвать метод draw? Зачем лишний метод draw создавать в классе painter?

  • @alexanderstepin
    @alexanderstepin ปีที่แล้ว

    Из примера непонятно зачем нужна данная прослойка, тем не менее спасибо за пример с официантом

  • @TanStanly
    @TanStanly 6 ปีที่แล้ว

    Супер! Спасибо!

  • @AxeleratorM210
    @AxeleratorM210 8 ปีที่แล้ว

    а как сделать автодописывание для system.out.println? задолбался постояно писать эту строку и еще ln постоянно дописывать?)

    • @dmitryp9274
      @dmitryp9274 8 ปีที่แล้ว

      "sout" + ctrl + space в NetBeans. В других IDE смотри горячие клавиши.

    • @AxeleratorM210
      @AxeleratorM210 8 ปีที่แล้ว

      ну и на том спасибо)

    • @alexkokhanchuk3314
      @alexkokhanchuk3314 8 ปีที่แล้ว +1

      это называется автокомплит. Под контретной ОС и ИДЕ в интернете много информации.

    • @marianservachak3407
      @marianservachak3407 7 ปีที่แล้ว

      syso и ctr+пробил

    • @ЯрославВладимиров-д7х
      @ЯрославВладимиров-д7х 4 ปีที่แล้ว

      Если будешь юзать интел идею - пиши sout и он тебе допишет

  • @alexn7502
    @alexn7502 8 ปีที่แล้ว

    Привет! Хотелось бы узнать, какой ноут у тебя?

    • @programm4you
      @programm4you  8 ปีที่แล้ว

      макбук про 2012 года 15 ретина

    • @alexn7502
      @alexn7502 8 ปีที่แล้ว

      Спасибо.

    • @programm4you
      @programm4you  8 ปีที่แล้ว

      Alex N надеюсь, ты меня не собрался взламывать)))

    • @alexn7502
      @alexn7502 8 ปีที่แล้ว

      Я не волшебник))) просто не знаю, какой взять, мнений много и про mac и про другие.

    • @programm4you
      @programm4you  8 ปีที่แล้ว

      могу посоветовать.

  • @margopril605
    @margopril605 7 ปีที่แล้ว

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

  • @nikolaygoltsov1782
    @nikolaygoltsov1782 9 ปีที่แล้ว +2

    Respekt

  • @ВарфоломейДзержинский
    @ВарфоломейДзержинский 5 ปีที่แล้ว

    5:40

  • @sergejpapa8892
    @sergejpapa8892 3 ปีที่แล้ว

    Как было не понятно в каких случаях и зачем применять делегаты, так и после просмотра осталось не понятно.
    А слбо подготовиться перед тем как снимать видео?
    Конкретно 10:55 на строке 13 ты передаешь аргументом нев Квадрат(), так если здесь уже есть объект Квадрат он може и нарисовать себя. Нахрена делегировать в чем преимущество делегирования пример не раскрывает.
    Так же видел оъяснение ооп. Мы можем умножить 2*2, а в ооп мы должны создать 2 класса а в третьем классе реализуем умножение. Здорово!? Да?
    Показано как, но не показано зачем, и очень хорошо показано "да ну его нафиг, можно прще".

  • @deathangel908
    @deathangel908 8 ปีที่แล้ว

    Круто, но медленно

  • @ИванТаранов-ч9п
    @ИванТаранов-ч9п 2 ปีที่แล้ว

    Полиморфичненько.

  • @litovkinvital
    @litovkinvital 7 ปีที่แล้ว

    КОКТЕЙЛЬЧИК)

  • @NaumGru
    @NaumGru 7 ปีที่แล้ว

    Klass!!!!!

  • @paradise_cracked
    @paradise_cracked 7 ปีที่แล้ว

    thx

  • @PashaZema98
    @PashaZema98 7 ปีที่แล้ว

    Так это же просто наследование, нет?

    • @ЯрославВладимиров-д7х
      @ЯрославВладимиров-д7х 4 ปีที่แล้ว

      Нет, тут наследования нет.
      Если разбирать пример с художником, то:
      1. Создается интерфейс с каким-то методом.
      2. Создаются классы, имплементирующиеся от интерфейса, реализующие его метод каждый по-своему (полиморфизм).
      3. Создается класс, который должен реализовать метод каждого из ранее написанные классов.
      4. Чтобы не прописывать заново все реализации, которые в реальном коде будут гораздо сложнее, создается объект класса и сеттер, который реализует этот объект тем, что в него передали.
      5. Теперь нам нужно просто создать новый объект последнего класса, вызвать его сеттер и передать в него новый экземпляр того класса, метод которого мы хотим вызвать (круг, треугольник, квадрат) после этого.
      6. Вызываем метод.
      Таким образом мы обошли наследование, которое не всегда возможно использовать (например наш класс уже имеет родителя, а наследование от 2х классов в Java нет), обошли копирование и переписание многих строчек кода, сделали код понятным и читаемым, менее ресурсоемким.

  • @jingolol1
    @jingolol1 7 ปีที่แล้ว +3

    Вот, честно. Объясняете хорошо, но примеры ужасные. Нужно брать реалистичные примеры, когда и где их можно использовать

  • @uzumymw-andrey
    @uzumymw-andrey 7 ปีที่แล้ว +1

    Круто, но тут опасность NPE...

  • @raymints9583
    @raymints9583 6 ปีที่แล้ว

    Лол. Оказывается я всё это время использовал Делигат. (Вообще, как-то бессмысленно это называть паттерном. До этого же легко додуматся. Кто вообще, будет два раза один и тот же метод писать?)

  • @GrafMKristo
    @GrafMKristo 8 ปีที่แล้ว

    Не слишком ли много памяти уходит на создание бесполезной копии объекта? И к тому же! А кто очищать будет?! Это ж какая утечка идёт у вас.

    • @ParaBellum199316
      @ParaBellum199316 8 ปีที่แล้ว +1

      +GrafMKristo garbage collector не слышал?

    • @GrafMKristo
      @GrafMKristo 8 ปีที่แล้ว

      ParaBellum199316 слышал. Только не знал, что на Яве тоже реализован.

    • @raymints9583
      @raymints9583 6 ปีที่แล้ว +1

      Вот так, прокоментировал, лишь бы прокоментировать - не разобравшись.

  • @ymenakrasiviybant
    @ymenakrasiviybant 8 ปีที่แล้ว +1

    Капец, не понимаю, зачем придумали столько "кодовых имен" - шаблонов для названия само собой разумеющихся базовых вещей? Еще понять не могу, в чем смысл всех этих геттеров и сеттеров, которые пишут джависты, если существует ключевое слово final? Может кто-то внятно объяснить, зачем нужно генерировать столько мусорного кода, который только усложняет простые вещи?

    • @leonidsenko6370
      @leonidsenko6370 8 ปีที่แล้ว +2

      Доброго времени суток.
      Столько "мусорного кода" требуется для того, чтобы обеспечить принципы инкапсуляции.
      Для чего нужно обеспечивать принципы инкапсуляции и какие последствия их необеспечения могут быть в проекте, можно посмотреть в гугле.
      Хорошая статья в avolberg.ru/theory/oop/encapsulation

    • @danyalOFF
      @danyalOFF 7 ปีที่แล้ว +9

      может тебе вообще не стоит программировать если ты задаешь такие вопросы?

    • @global_silence2623
      @global_silence2623 6 ปีที่แล้ว +2

      Чего вообще? Ключевое слово final существует для того, чтобы что-то создавать в "замороженном" состоянии. К примеру переменную, которая не будет изменяться. Обычно, когда хотят создать константу в джаве пишут два модификатора - static final. static дает понять, что переменная или объект будет создан в памяти 1 раз. Причем тут геттеры и сеттеры? Геттеры и сеттеры можно сравнить с конструктором класса. Но причем тут final я чето не могу додуматься. Геттеры и сеттеры выполняют роль конструктора класса, только это более гибкий инструмент. Сеттеры устанавливают значения для экземпляра класса, геттеры возвращают эти значения.

    • @raymints9583
      @raymints9583 6 ปีที่แล้ว

      При чем тут final? Представь, что нам , например, нужно чтоб переменная double имела только два знака после точки. Что лучше - делать округление в каждый раз или один раз написать сеттер?

    • @global_silence2623
      @global_silence2623 6 ปีที่แล้ว

      что такое кома?