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

  Рет қаралды 45,402

Eugene Suleimanov

Eugene Suleimanov

Күн бұрын

Пікірлер: 58
@ruslanby-et2qc
@ruslanby-et2qc 3 жыл бұрын
так быстро и просто, что я нифига не понял. Посмотрю ещё раз
@ДмитрийМаркварт-ж5б
@ДмитрийМаркварт-ж5б 3 жыл бұрын
Евгений, спасибо большое за ваш труд!
@stanislavkuzmin2611
@stanislavkuzmin2611 5 жыл бұрын
Компактно, но информативно. Спасибо)
@maxforest7133
@maxforest7133 5 жыл бұрын
Было бы более понятно если сначала написать без патерна, а потом показать как то же самое можно решить с помощью декоратора
@alibn2911
@alibn2911 3 жыл бұрын
Если не в состоянии сами написать этот код до использования декоратора, тогда вам еще рано смотреть это видео.
@mrakobes228
@mrakobes228 9 ай бұрын
Легче было бы привести всех разработчиков к общему интерфейсу и в классе реализации сеньора добавить метод кодРевью и внедретить в преопределённый метод интерфейса, а тут добавляем целый класс, чтобы добавить функциональность. Иногда использование паттерна избыточно.
@maksimivanov8728
@maksimivanov8728 2 жыл бұрын
Хороший пример про рабочего коня, который делает все за всех). Только вот настоящий Тим-лид вроде должен только координировать и делегировать работу в команде.
@EugeneSuleimanov
@EugeneSuleimanov 2 жыл бұрын
Шутка, юмор … :)
@mohawberel
@mohawberel 4 жыл бұрын
Заебись пример, тем кому непонятно -> прочитайте пару статей на википедии, а потом сюда. там вам и диаграмки и выгоды использования покажут,,, а на ютубчике только код посмотреть можно. Еще раз спасибо автору
@oleksii2362
@oleksii2362 3 жыл бұрын
Отличное видео. Я бы показал еще результат вывода на печать при смене местами в Таск: Синьора и ТимЛида.
@EugeneSuleimanov
@EugeneSuleimanov 3 жыл бұрын
Спасибо за отзыв!
@wokkku
@wokkku Жыл бұрын
Отличные видео. Коротко и ясно!
@EugeneSuleimanov
@EugeneSuleimanov Жыл бұрын
Спасибо за отзыв!
@yosobakki
@yosobakki 10 ай бұрын
Мой любимый структурный паттерн
@Andrzej3935
@Andrzej3935 2 жыл бұрын
Спасибо, всё очень доступно!
@EugeneSuleimanov
@EugeneSuleimanov 2 жыл бұрын
Спасибо за отзыв!
@alexeystaroverov4804
@alexeystaroverov4804 5 жыл бұрын
Если посмотришь книжки там всегда идет сначала мотивация на паттерн. Непонятно почему не сделать просто иерархию. Непонятно почему интерфейс developer а не класс
@ksviety
@ksviety 3 жыл бұрын
Потому что наследование это ужасно, а так в видео паттерн вообще не правильно показан
@ivanandreev9571
@ivanandreev9571 2 жыл бұрын
@@ksviety почему неправильно?
@ivanandreev9571
@ivanandreev9571 2 жыл бұрын
потому что с помощию только иерархии вы не сможете выполнить добавить к объекту некоторую дополнительную функциональность, которая будет выполняться до, после или вместо основной функциональности (логирование и прочее)
@ksviety
@ksviety 2 жыл бұрын
@@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 два разных названия одного паттерна...
@timankov
@timankov 2 жыл бұрын
Очень круто! спасибо! сохранил на всякий случай!)
@СергейКарпиченко-с6б
@СергейКарпиченко-с6б 3 жыл бұрын
Спасибо большое за видео!
@pate2418
@pate2418 Жыл бұрын
Это все мне очень напомнило: Вот дом, Который построил Джек. А это пшеница, Которая в тёмном чулане хранится В доме, Который построил Джек. А это весёлая птица-синица, Которая часто ворует пшеницу, Которая в тёмном чулане хранится В доме, Который построил Джек. Вот кот, Который пугает и ловит синицу, Которая часто ворует пшеницу, Которая в тёмном чулане хранится В доме, Который построил Джек. Вот пёс без хвоста, Который за шиворот треплет кота, Который пугает и ловит синицу, Которая часто ворует пшеницу, Которая в тёмном чулане хранится В доме, Который построил Джек. А это корова безрогая, Лягнувшая старого пса без хвоста, Который за шиворот треплет кота, Который пугает и ловит синицу, Которая часто ворует пшеницу, Которая в тёмном чулане хранится В доме, Который построил Джек. А это старушка, седая и строгая, Которая доит корову безрогую, Лягнувшую старого пса без хвоста, Который за шиворот треплет кота, Который пугает и ловит синицу, Которая часто ворует пшеницу, Которая в тёмном чулане хранится В доме, Который построил Джек. А это ленивый и толстый пастух, Который бранится с коровницей строгою, Которая доит корову безрогую, Лягнувшую старого пса без хвоста, Который за шиворот треплет кота, Который пугает и ловит синицу, Которая часто ворует пшеницу, Которая в тёмном чулане хранится В доме, Который построил Джек. Вот два петуха, Которые будят того пастуха, Который бранится с коровницей строгою, Которая доит корову безрогую, Лягнувшую старого пса без хвоста, Который за шиворот треплет кота, Который пугает и ловит синицу, Которая часто ворует пшеницу, Которая в тёмном чулане хранится В доме, Который построил Джек.
@merlandodeluxe
@merlandodeluxe 7 ай бұрын
проорал)
@duckdeduct522
@duckdeduct522 2 жыл бұрын
Спасибо!
@m0naco608
@m0naco608 8 ай бұрын
Может было бы лучше не создавать отдельные классы для SeniorJavaDeveloper и JavaTeamLead, а просто создать SeniorDeveloper и TeamLead ? А то получается, для каждого разработчика, который использует другой стек, нужно создавать отдельный класс ? Всё равно же у них есть поле Developer, значит не нужно привязывать класс конкретно к джава разработчику и джава тимлиду ?
@ОпельсинОпельсинов
@ОпельсинОпельсинов Жыл бұрын
Привет, автор. у тебя ошибка с точки зрения ООП. DeveloperDecorator должен бысть абстрактным, он является суперклассом для JavaTeamLead и SeniorJavaDeveloper. вот отрывок из книги: "AbstractWrapper. Абстрактный класс, выступающий в этой роли, - это общий суперкласс для классов-оберток. Экземпляры этого класса содержат такке ссылку на объект AbstractServiceIF, которому объекты ConcreteWrapper! делегируют операции." МАРК ГРАНД "шаблоны проектирования в JAVA" (для новичков поясню. AbstractWrapper это тот же декоратор) закрепи пожалуйста мой коммент или напиши свой. так, как ты это делал в прошлом видео
@EugeneSuleimanov
@EugeneSuleimanov Жыл бұрын
Сверюсь с первоисточником и отпишусь. Большое спасибо за комментарий!!!
@EugeneSuleimanov
@EugeneSuleimanov Жыл бұрын
Я перечитал GoF по этому поводу и на данный момент, не вижу нарушений классического паттерна. С Марк Гранд не знаком, насколько я знаю GoF считается наиболее авторитетным изданием в контексте паттернов проектирования. Классы Developer, DeveloperDecorator и JavaDeveloper представляют основные компоненты паттерна декоратор. Developer - это интерфейс, определяющий базовые операции для разработчика. DeveloperDecorator - это абстрактный класс-декоратор, расширяющий Developer и предоставляющий базовую реализацию обертки для компонента. JavaDeveloper - это конкретная реализация компонента. Классы JavaTeamLead и SeniorJavaDeveloper представляют конкретные декораторы. Они расширяют DeveloperDecorator и добавляют дополнительное поведение к компоненту. JavaTeamLead добавляет функциональность отправки еженедельного отчета, а SeniorJavaDeveloper добавляет функциональность код-ревью. Класс Task демонстрирует использование паттерна декоратор. Он создает цепочку декораторов, начиная с JavaDeveloper, затем SeniorJavaDeveloper и, наконец, JavaTeamLead. Вызов метода makeJob() на объекте developer приведет к выполнению задания с добавленной функциональностью каждого декоратора. Если есть дополнительные замечания, обязательно просмотрю. Еще раз спасибо за комментарий.
@СергейСоколов-е6б
@СергейСоколов-е6б 3 жыл бұрын
А разве этот шаблон не противоречит Single Responsibility Principle?
@darst94
@darst94 6 жыл бұрын
Добрый день, подскажите что за плагин для диаграмм
@romanmotovilov129
@romanmotovilov129 6 жыл бұрын
Дима Артюхов - это встроенные диаграммы для платной версии программы(Enterprise Edition)
@Redvils
@Redvils 4 жыл бұрын
Привет, подскажи на 6 минуте видео ты как-то открыл диаграмму своих классов, как это сделать? Нужен планиг какой-то?
@EugeneSuleimanov
@EugeneSuleimanov 4 жыл бұрын
Нет, это стандартный плагин idea ultimate
@Redvils
@Redvils 4 жыл бұрын
@@EugeneSuleimanov Понял, спасибо
@telephon3208
@telephon3208 2 жыл бұрын
не поняла в чем преимущество шаблона
@mrakobes228
@mrakobes228 9 ай бұрын
Я тоже. Легче было бы привести всех разработчиков к общему интерфейсу и в классе реализации сеньора добавить метод кодРевью и внедретить в преопределённый метод интерфейса, а тут добавляем целый класс, чтобы добавить функциональность.
@ВикторДемихов-т8р
@ВикторДемихов-т8р 5 жыл бұрын
Тема не раскрыта. Пример то понятный. Но понять для чего это используется самое главное. Но приведённый пример не объясняет ничего.
@MrDepava
@MrDepava 5 жыл бұрын
Иногда нет смысла обьяснять, у тебя будет класс с какой то библиотеки, который ты ну никак не можешь изменить, у тебя нет доступа к этому. Но тебе хочется, чтоб класс этот делал не только то, что он умеет, а чуточку больше, и у тебя в голове вспомнится про декоратор.
@protiv_bio
@protiv_bio 3 жыл бұрын
@@MrDepava то есть это по сути костыли. У нас, к сожалению, иногда предпочитают использовать странные решения, зато без "костылей" даже в виде паттернов.
@AndreyDeveloper
@AndreyDeveloper 8 жыл бұрын
Уважаемый автор! А объясните пожалуйста, а почему вы систематически пишете Developer developer = new JavaDeveloper(); а не JavaDeveloper developer = new Javadeveloper(); Какие преимущества такая запись даёт? Она же более непонятная.
@EugeneSuleimanov
@EugeneSuleimanov 8 жыл бұрын
Уважаемый подписчик, объясняю :) Предположим, что у нас есть некий класс Project, который содержит коллекцию разработчиков разной специализации (т.е. наследников класса Developer - JavaDeveloper, CppDeveloper, PhpDeveloper). Для этого мы создаём List developers, в котором можем хранить любой класс, который является наследником Developer. Думаю дальнейшие преимущества понятны. Тоже самое исользуется и для самих коллекций, например: List strings = new ArrayList(); Set stingSet = new HashSet(); и т.д.
@AndreyDeveloper
@AndreyDeveloper 8 жыл бұрын
То есть вы хотите сказать, что в List developers можно запихнуть все объекты, реализующие интерфейс developer? Тогда понятно. И очень доступно.
@EugeneSuleimanov
@EugeneSuleimanov 8 жыл бұрын
Именно. Всегда пожауйста, Andy.
@Yuu-tu4vo
@Yuu-tu4vo 3 жыл бұрын
@@AndreyDeveloper механизм upcast-а
@firewatermoonsun
@firewatermoonsun Жыл бұрын
Т.е. используется, если нужно добавить какую-то дополнительную функциональность.
@EugeneSuleimanov
@EugeneSuleimanov Жыл бұрын
Да, все верно.
@ПутьТрейдера-ж3к
@ПутьТрейдера-ж3к 4 жыл бұрын
top
@АмэйзингЧенал
@АмэйзингЧенал 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 жыл бұрын
джаб - называют японцев. А работа - это джоб ! в простонародье вджобывать.
@dimitryrusu4022
@dimitryrusu4022 Жыл бұрын
В американском акценте говорится ближе к "а". Например, никто не говорит в США hot как хот, они говорят хат.
Шаблоны Java. Facade (Фасад)
7:51
Eugene Suleimanov
Рет қаралды 24 М.
Шаблоны Java. FactoryMethod (Фабричный метод)
12:22
Eugene Suleimanov
Рет қаралды 96 М.
Миллионер | 3 - серия
36:09
Million Show
Рет қаралды 2,1 МЛН
FOREVER BUNNY
00:14
Natan por Aí
Рет қаралды 31 МЛН
From Small To Giant 0%🍫 VS 100%🍫 #katebrush #shorts #gummy
00:19
Шаблоны Java. Proxy (Прокси)
7:01
Eugene Suleimanov
Рет қаралды 27 М.
Шаблоны Java. Prototype (Прототип)
7:32
Eugene Suleimanov
Рет қаралды 30 М.
Шаблоны Java. AbstractFactory (Абcтрактная фабрика)
14:34
Шаблоны Java. Builder (Строитель)
10:58
Eugene Suleimanov
Рет қаралды 52 М.
Шаблоны Java. Декоратор (Decorator / Wrapper)
27:05
Vladimir Vysokomornyi
Рет қаралды 33 М.
Шаблоны Java. Flyweight (Приспособленец).
7:21
Eugene Suleimanov
Рет қаралды 16 М.
Шаблоны Java. Bridge (Мост)
6:56
Eugene Suleimanov
Рет қаралды 28 М.
Шаблоны Java. Адаптер (Adapter)
11:31
Vladimir Vysokomornyi
Рет қаралды 35 М.
Миллионер | 3 - серия
36:09
Million Show
Рет қаралды 2,1 МЛН