Шаблоны Java. Decorator (Декоратор)

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

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

  • @ruslanby-et2qc
    @ruslanby-et2qc 3 ปีที่แล้ว +39

    так быстро и просто, что я нифига не понял. Посмотрю ещё раз

  • @ДмитрийМаркварт-ж5б
    @ДмитрийМаркварт-ж5б 4 ปีที่แล้ว +5

    Евгений, спасибо большое за ваш труд!

  • @stanislavkuzmin2611
    @stanislavkuzmin2611 5 ปีที่แล้ว +15

    Компактно, но информативно. Спасибо)

  • @maxforest7133
    @maxforest7133 5 ปีที่แล้ว +43

    Было бы более понятно если сначала написать без патерна, а потом показать как то же самое можно решить с помощью декоратора

    • @alibn2911
      @alibn2911 3 ปีที่แล้ว +6

      Если не в состоянии сами написать этот код до использования декоратора, тогда вам еще рано смотреть это видео.

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

    Отличные видео. Коротко и ясно!

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

    Спасибо, всё очень доступно!

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

    Отличное видео.
    Я бы показал еще результат вывода на печать при смене местами в Таск: Синьора и ТимЛида.

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

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

  • @mrakobes228
    @mrakobes228 11 หลายเดือนก่อน +2

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

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

    Очень круто! спасибо! сохранил на всякий случай!)

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

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

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

    Мой любимый структурный паттерн

  • @alexeystaroverov4804
    @alexeystaroverov4804 6 ปีที่แล้ว +14

    Если посмотришь книжки там всегда идет сначала мотивация на паттерн. Непонятно почему не сделать просто иерархию. Непонятно почему интерфейс developer а не класс

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

      Потому что наследование это ужасно, а так в видео паттерн вообще не правильно показан

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

      @@ksviety почему неправильно?

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

      потому что с помощию только иерархии вы не сможете выполнить добавить к объекту некоторую дополнительную функциональность, которая будет выполняться до, после или вместо основной функциональности (логирование и прочее)

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

      @@ivanandreev9571 Показанное в видео больше похоже на Wrapper. Декоратор должен иметь ровно тот же интерфейс что и декорируемый объект, хорошим примером может быть что-то вроде:
      Text text = new Capitalized(new Concatenated(new StringText("Hello, "), new FileText(new File("./world.txt"))));
      text.toString(); // HELLO, WORLD!

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

      @@ksviety так декоратор в видео и имеет тот же интерфейс, а ещё если судить по книжке банды 4 wrapper и decorator два разных названия одного паттерна...

  • @СергейКарпиченко-с6б
    @СергейКарпиченко-с6б 3 ปีที่แล้ว

    Спасибо большое за видео!

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

    Это все мне очень напомнило:
    Вот дом,
    Который построил Джек.
    А это пшеница,
    Которая в тёмном чулане хранится
    В доме,
    Который построил Джек.
    А это весёлая птица-синица,
    Которая часто ворует пшеницу,
    Которая в тёмном чулане хранится
    В доме,
    Который построил Джек.
    Вот кот,
    Который пугает и ловит синицу,
    Которая часто ворует пшеницу,
    Которая в тёмном чулане хранится
    В доме,
    Который построил Джек.
    Вот пёс без хвоста,
    Который за шиворот треплет кота,
    Который пугает и ловит синицу,
    Которая часто ворует пшеницу,
    Которая в тёмном чулане хранится
    В доме,
    Который построил Джек.
    А это корова безрогая,
    Лягнувшая старого пса без хвоста,
    Который за шиворот треплет кота,
    Который пугает и ловит синицу,
    Которая часто ворует пшеницу,
    Которая в тёмном чулане хранится
    В доме,
    Который построил Джек.
    А это старушка, седая и строгая,
    Которая доит корову безрогую,
    Лягнувшую старого пса без хвоста,
    Который за шиворот треплет кота,
    Который пугает и ловит синицу,
    Которая часто ворует пшеницу,
    Которая в тёмном чулане хранится
    В доме,
    Который построил Джек.
    А это ленивый и толстый пастух,
    Который бранится с коровницей строгою,
    Которая доит корову безрогую,
    Лягнувшую старого пса без хвоста,
    Который за шиворот треплет кота,
    Который пугает и ловит синицу,
    Которая часто ворует пшеницу,
    Которая в тёмном чулане хранится
    В доме,
    Который построил Джек.
    Вот два петуха,
    Которые будят того пастуха,
    Который бранится с коровницей строгою,
    Которая доит корову безрогую,
    Лягнувшую старого пса без хвоста,
    Который за шиворот треплет кота,
    Который пугает и ловит синицу,
    Которая часто ворует пшеницу,
    Которая в тёмном чулане хранится
    В доме,
    Который построил Джек.

  • @m0naco608
    @m0naco608 10 หลายเดือนก่อน

    Может было бы лучше не создавать отдельные классы для SeniorJavaDeveloper и JavaTeamLead, а просто создать SeniorDeveloper и TeamLead ? А то получается, для каждого разработчика, который использует другой стек, нужно создавать отдельный класс ? Всё равно же у них есть поле Developer, значит не нужно привязывать класс конкретно к джава разработчику и джава тимлиду ?

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

    Спасибо!

  • @СергейСоколов-е6б
    @СергейСоколов-е6б 3 ปีที่แล้ว

    А разве этот шаблон не противоречит Single Responsibility Principle?

  • @ОпельсинОпельсинов
    @ОпельсинОпельсинов ปีที่แล้ว +1

    Привет, автор.
    у тебя ошибка с точки зрения ООП.
    DeveloperDecorator должен бысть абстрактным, он является суперклассом для JavaTeamLead и SeniorJavaDeveloper.
    вот отрывок из книги:
    "AbstractWrapper. Абстрактный класс, выступающий в этой роли, - это общий
    суперкласс для классов-оберток. Экземпляры этого класса содержат такке
    ссылку на объект AbstractServiceIF, которому объекты ConcreteWrapper!
    делегируют операции."
    МАРК ГРАНД "шаблоны проектирования в JAVA"
    (для новичков поясню. AbstractWrapper это тот же декоратор)
    закрепи пожалуйста мой коммент или напиши свой. так, как ты это делал в прошлом видео

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

      Сверюсь с первоисточником и отпишусь. Большое спасибо за комментарий!!!

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

      Я перечитал GoF по этому поводу и на данный момент, не вижу нарушений классического паттерна.
      С Марк Гранд не знаком, насколько я знаю GoF считается наиболее авторитетным изданием в контексте паттернов проектирования.
      Классы Developer, DeveloperDecorator и JavaDeveloper представляют основные компоненты паттерна декоратор. Developer - это интерфейс, определяющий базовые операции для разработчика. DeveloperDecorator - это абстрактный класс-декоратор, расширяющий Developer и предоставляющий базовую реализацию обертки для компонента. JavaDeveloper - это конкретная реализация компонента.
      Классы JavaTeamLead и SeniorJavaDeveloper представляют конкретные декораторы. Они расширяют DeveloperDecorator и добавляют дополнительное поведение к компоненту. JavaTeamLead добавляет функциональность отправки еженедельного отчета, а SeniorJavaDeveloper добавляет функциональность код-ревью.
      Класс Task демонстрирует использование паттерна декоратор. Он создает цепочку декораторов, начиная с JavaDeveloper, затем SeniorJavaDeveloper и, наконец, JavaTeamLead. Вызов метода makeJob() на объекте developer приведет к выполнению задания с добавленной функциональностью каждого декоратора.
      Если есть дополнительные замечания, обязательно просмотрю.
      Еще раз спасибо за комментарий.

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

    Добрый день, подскажите что за плагин для диаграмм

    • @romanmotovilov129
      @romanmotovilov129 6 ปีที่แล้ว +3

      Дима Артюхов - это встроенные диаграммы для платной версии программы(Enterprise Edition)

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

    не поняла в чем преимущество шаблона

    • @mrakobes228
      @mrakobes228 11 หลายเดือนก่อน

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

  • @ПутьТрейдера-ж3к
    @ПутьТрейдера-ж3к 4 ปีที่แล้ว

    top

  • @AndreyDeveloper
    @AndreyDeveloper 8 ปีที่แล้ว +4

    Уважаемый автор! А объясните пожалуйста, а почему вы систематически пишете
    Developer developer = new JavaDeveloper();
    а не JavaDeveloper developer = new Javadeveloper();
    Какие преимущества такая запись даёт? Она же более непонятная.

    • @EugeneSuleimanov
      @EugeneSuleimanov  8 ปีที่แล้ว +19

      Уважаемый подписчик, объясняю :)
      Предположим, что у нас есть некий класс Project, который содержит коллекцию разработчиков разной специализации (т.е. наследников класса Developer - JavaDeveloper, CppDeveloper, PhpDeveloper).
      Для этого мы создаём List developers, в котором можем хранить любой класс, который является наследником Developer.
      Думаю дальнейшие преимущества понятны.
      Тоже самое исользуется и для самих коллекций, например:
      List strings = new ArrayList();
      Set stingSet = new HashSet();
      и т.д.

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

      То есть вы хотите сказать, что в List developers можно запихнуть все объекты, реализующие интерфейс developer? Тогда понятно. И очень доступно.

    • @EugeneSuleimanov
      @EugeneSuleimanov  8 ปีที่แล้ว +9

      Именно.
      Всегда пожауйста, Andy.

    • @Yuu-tu4vo
      @Yuu-tu4vo 3 ปีที่แล้ว +1

      @@AndreyDeveloper механизм upcast-а

  • @Redvils
    @Redvils 4 ปีที่แล้ว

    Привет, подскажи на 6 минуте видео ты как-то открыл диаграмму своих классов, как это сделать? Нужен планиг какой-то?

    • @EugeneSuleimanov
      @EugeneSuleimanov  4 ปีที่แล้ว

      Нет, это стандартный плагин idea ultimate

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

      @@EugeneSuleimanov Понял, спасибо

  • @ВикторДемихов-т8р
    @ВикторДемихов-т8р 5 ปีที่แล้ว +12

    Тема не раскрыта. Пример то понятный. Но понять для чего это используется самое главное. Но приведённый пример не объясняет ничего.

    • @MrDepava
      @MrDepava 5 ปีที่แล้ว +12

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

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

      @@MrDepava то есть это по сути костыли. У нас, к сожалению, иногда предпочитают использовать странные решения, зато без "костылей" даже в виде паттернов.

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

    Т.е. используется, если нужно добавить какую-то дополнительную функциональность.

  • @АмэйзингЧенал
    @АмэйзингЧенал 4 ปีที่แล้ว

    Delegate ?

  • @anjey-duda
    @anjey-duda 3 ปีที่แล้ว

    как в IntelliJ IDEA показывать Диаграммы?

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

      Это стандартный плагин для Ultimate edition

    • @anjey-duda
      @anjey-duda 3 ปีที่แล้ว

      @@EugeneSuleimanov а для Community?

  • @AlexK-xn7tq
    @AlexK-xn7tq ปีที่แล้ว

    Кто-то что-то понял?))

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

    эм... не понял, еще раз. :)

  • @dimitrishat8659
    @dimitrishat8659 3 ปีที่แล้ว +2

    джаб - называют японцев. А работа - это джоб ! в простонародье вджобывать.

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

      В американском акценте говорится ближе к "а". Например, никто не говорит в США hot как хот, они говорят хат.