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

Поділитися
Вставка
  • Опубліковано 31 гру 2024

КОМЕНТАРІ • 74

  • @MadMaxx420
    @MadMaxx420 5 місяців тому

    привет из 2024, все еще актуально, автору огромный респект, очень доходчиво👍

  • @СергейСтепанов-ч4б9т
    @СергейСтепанов-ч4б9т 9 років тому +59

    Все ясно и понятно, спасибо. Единственное, чуть чаям не подавился, на месте "чет я запутался".

    • @notUnclePetro
      @notUnclePetro 7 років тому +3

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

  • @ЕвгенийКруглов-й8в

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

  • @spinacker16
    @spinacker16 7 років тому +13

    грыжа

  • @starkoracia
    @starkoracia 2 роки тому

    Уже на второй минуте понял больше чем по документациям!) То что нужно)
    Блоксхемы решают) Спасибо автору!)

  • @Сергей-и8ж7в
    @Сергей-и8ж7в 3 роки тому

    Отличный урок. До этого посмотрел много маленьких роликов и прочитал пару статей. А это видео расставило все по своим местам. Класс!

  • @sergeypiskunov5063
    @sergeypiskunov5063 8 років тому +3

    Отличная серия по паттернам. И вообще канал отличный спасибо за Ваш труд. Помогаете в освоении языка очень сильно.

  • @Mr43808
    @Mr43808 9 років тому +7

    Очень доходчиво объясняете,отличный урок.

  • @ALEXZANDR_GAMES
    @ALEXZANDR_GAMES Рік тому

    Спасибо тебе, добрый человек!

  • @mariafilatova2682
    @mariafilatova2682 4 роки тому +1

    Большое спасибо! Ваше объяснение "зашло" с первых минут!

  • @denislopatin3100
    @denislopatin3100 8 років тому +3

    великолепно, прочитал паттерн в книге издательства o'reilly - все классно объяснили, но по видео практический момент расставил все точки.

    • @programm4you
      @programm4you  8 років тому +3

      +Dennis Spade спасибо, осталось еще немного сделать для завершения серии, самые сложные остались))

    • @Дмитрий-ю9к3г
      @Дмитрий-ю9к3г 4 роки тому

      У Владимира самые понятные видео о паттернах на ютубе. Как орешки щелкаются

  • @alexburzuin7679
    @alexburzuin7679 7 років тому

    Очень благодарен вам за серию уроков по шаблонам, ...читаю книгу Мэт Зандстры"php, objects and patterns" и в основном благодаря вашим урокам и доступным примерам по decorator/composite/abstract factory и т.д. понимаю о чем идет речь в книге. Ещё раз БОЛЬШОЕ ВАМ СПАСИБО :)

  • @ДенисАлександрович-ю8р

    Агонь, всё ясно и по царски! Спасибо за видео =)

  • @ilyamalgin4985
    @ilyamalgin4985 8 років тому

    Спасибо за видео. После англоязычных туториалов приятно послушать ещё объяснение на русском)

  • @ИконаИконыч
    @ИконаИконыч 28 днів тому

    Спасибо, только ваше видео помогло

  • @marialinnik1825
    @marialinnik1825 5 років тому

    Спасибо! это супер доходчивое объяснение! Урра!:)

  • @ivanchupin9672
    @ivanchupin9672 6 років тому

    a really comprehensive explanation, thank u so much!

  • @kek_pupold
    @kek_pupold 6 років тому +1

    Я первый раз смотрю видео на эту тему, автор объясняет, я все понимаю, но тут он вдруг говорит "чет я запутался". Забавно :D

  • @TheDiss95
    @TheDiss95 4 роки тому +1

    Спасибо за урок! Было бы проще объяснить последовательность действий, если учитывать последовательность вызовов методов в каждом декораторе

  • @jamesmusta
    @jamesmusta 8 років тому +6

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

    • @programm4you
      @programm4you  8 років тому +3

      +Serhii Horun на здоровье!! спасибо за отзыв.

    • @dgdanconia
      @dgdanconia 8 років тому

      +Школа программирования Можешь код на github выложить?

  • @Дмитрий-ю9к3г
    @Дмитрий-ю9к3г 4 роки тому +1

    Хотелось бы отметить, что данный паттерн широко применен в пакете .io* на потоках ввода-вывода. Если я правильно понимаю.

  • @andreymix492
    @andreymix492 8 років тому

    Спасибо. Очень доступно

  • @hamster_04
    @hamster_04 5 років тому

    Очень понравилось! Спасибо)

    • @Judosaper
      @Judosaper 3 роки тому

      Шерлок, ты почему ещё на 22-м уровне или уже работаешь программистом?)

    • @hamster_04
      @hamster_04 3 роки тому

      @@Judosaper Вы следите за мной?)

    • @Judosaper
      @Judosaper 3 роки тому

      @@hamster_04 конечно, уже давно!)

  • @user-mv8ut1lh6c
    @user-mv8ut1lh6c 8 років тому +5

    Уважаемый Автор!
    Спасибо за уроки по разбору паттернов.
    Но есть несколько "но" с точки зрения программиста:
    1. Излишние "паблики" в данном случае не нужны (кроме public void print(){//...}). Надо привыкать грамотно ограничивать области видимости "с пеленок".
    2. Уж если Вы реализовали метод void print() в абстрактном классе Decorator, то это уже, по сути, не абстрактный класс. Для сохранения структуры паттерна этого не надо было делать.
    А так очень познавательно. Большой + за то, что сделан упор не на теорию (которой в инете "до жопы"), а на практическую реализацию.
    Спасибо!

    • @notUnclePetro
      @notUnclePetro 7 років тому +1

      это же пример паттерна, а не "Как грамотно расставить модификаторы доступа")
      тем более, все его примеры рассчитаны на людей, уже знакомых с JavaCore и ООП

    • @timuris5820
      @timuris5820 5 років тому

      I disagree with 2 path. Abstract class able to contain not abstract methods. And say about 1 path no public, but protected

    • @Дмитрий-ю9к3г
      @Дмитрий-ю9к3г 4 роки тому

      Разве в абстрактном классе реализовывать методы - плохой тон?
      Если например такая ситуация, что там есть абстрактные методы и есть метод, который во всех наследниках будет одинаков. Его ж в любом случае будет правильно вынести в этот родительский абстрактный класс.

    • @MrStim
      @MrStim 4 роки тому

      Не понял, в каком месте автор канала реализовал абстрактный метод print()? Чего-то я не вижу реализации. А является он абстрактным: 1) потому что необходимо перебросить абстрактный метод print() дальше по ветке наследования; 2) нет никакого смысла создавать объект, а если и захочется, то нам придется реализовать абстрактный метод print(), который пришел к нам от реализованного интерфейса. Если и реализуем, то получится тот же метод print(), что и в классе Printer. Если реализуем по-другому, то возвращаемся к тому случаю, как и классы LeftBracketDecorator, RightBracketDecorator, QuotesDecorator. Стало быть, вернулись к тому же, отчего хотели уйти (улучшить код).

  • @pavelivan8272
    @pavelivan8272 5 років тому +1

    Если хочешь сам что-то понять попробуй объяснить другому)) Спасибо за видео)))

  • @OlexanderL
    @OlexanderL 8 років тому +1

    Огромное спасибо!

  • @maksimus.ssirotkin1124
    @maksimus.ssirotkin1124 6 років тому

    Прекрасное видео

  • @shamr_dz
    @shamr_dz 8 років тому +2

    Спасибо! Все четко!
    Я еще на том этапе, когда задают глупые вопросы:
    Зачем было выдумывать паттерн декоратор, когда можно использовать наследование и переопределение?
    public class My
    {
    public static void main(String[] args) {
    World my = new Decoration();
    my.print();
    }
    }
    class World {
    void print(){
    System.out.println("Привет");
    }
    }
    class Decoration extends World {
    @Override
    void print()
    {
    super.print();
    System.out.println("МИР!!!");
    }
    }
    объясните плиз преимущества и недостатки... или может я вообще что-то не вкуриваю?

    • @programm4you
      @programm4you  8 років тому +2

      так ты сам в своем вопросе и ответ можешь найти. Как изменить существующий функционал, не прибегая к наследованию и переопределению и при этом так, чтобы клиент ничего не понял, создаешь класс обертку, который обертывает существующий код новым одеялом. Например, летом ты спишь под пустым пододеяльником, а зимой заправляешь в него теплое одеяло)))

    • @alexeystaroverov4804
      @alexeystaroverov4804 7 років тому +3

      Если тебе надо будет написать не Привет Мир, а Пока Мир, у тебя еще 2 класса появятся. А с декоратором только 1, который Пока. А потом ты его декорируешь уже существуещим, который Мир. При этом декорировать можно снаружи, не меня кода, который ты допустим распространил на 100млн пользователей уже )

  • @vinogor
    @vinogor 6 років тому +1

    Скажите, а что за книжка промелькнула на 18:09 (ua-cam.com/video/X7-3wQElWd4/v-deo.html)? "применение шаблонов java", а что за автор?

    • @programm4you
      @programm4you  6 років тому +1

      Держи:
      cloud.mail.ru/public/CQ2C/8z1YKEbJ5

    • @vinogor
      @vinogor 6 років тому

      @@programm4you спасибо!

    • @ViktorVdovichenko
      @ViktorVdovichenko 5 років тому

      @@programm4you уже нет книги:-(

    • @Miuxer
      @Miuxer 4 роки тому

      @@ViktorVdovichenko все там есть

  • @mr0skif
    @mr0skif 2 роки тому

    хахха. настроение поднял)

  • @vladimir5235
    @vladimir5235 5 років тому +2

    Может кому пригодиться:
    github.com/ta4anka/DesignPatterns/blob/master/src/basepatterns/structural/decorator/DecoratorApp.java

  • @wwhitemann
    @wwhitemann 7 років тому

    Здравствуйте, а разве в абстрактном классе Decorator метод print() не лучше будет обьявить абстрактным? Т.е. для того, что бы быть конкретным декоратором классу необходимо обязательно реализовать этот абстр. метод.

    • @SansHAP
      @SansHAP 6 років тому

      абстрактные методы не выполняют никаких действий = методам в интерфейсах

  • @ИльяВяткин-с7с
    @ИльяВяткин-с7с 9 років тому +1

    Спасибо.

  • @ViktorVdovichenko
    @ViktorVdovichenko 5 років тому

    а если без инстанса вызвать метод print, вообще кошмарная конструкция получается. new QuotesDecorator(new LeftBracketDecorator(new RightBracketDecorator(new Printer("Идёт печать")))).print();

  • @adelantad
    @adelantad Рік тому

    Больше всего смущает вкладка "Грыжа"! Неужели нас всех это ждет((((

  • @KlGleb
    @KlGleb 9 років тому +5

    Меня очень смущает, что у всех декораторов одинаковый конструктор :-)

    • @timyrmingzev9455
      @timyrmingzev9455 6 років тому +7

      Надеюсь спустя два года тебя это перестало смущать)

  • @abakarkamalov7417
    @abakarkamalov7417 2 роки тому

    16:25 просто угар)

  • @neustupov
    @neustupov 7 років тому

    Спасибо!

  • @cvetk0ff
    @cvetk0ff 11 місяців тому

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

  • @вапвапвапвапва-ж1и
    @вапвапвапвапва-ж1и 5 років тому +1

    Автор похоже сам запутался пока объяснял

  • @paradise_cracked
    @paradise_cracked 7 років тому

    thx

  • @isephar
    @isephar 4 роки тому

    Учитель с вас так себе)

  • @Cyberg_GK
    @Cyberg_GK 3 роки тому

    А зачем нужен интерфейс, все это так же делается и без него?!

    • @elizabeta3054
      @elizabeta3054 2 роки тому

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

  • @yevheniikozhevin5845
    @yevheniikozhevin5845 5 років тому

    абстрактный метод принт забыл написать =(

  • @user-UMPp2vu1616xo
    @user-UMPp2vu1616xo 7 років тому

    Рецепт как запутать код, что бы другие долго чесали репу и недоумевали
    Чем плохи старые добрые. object.print1; . object.print2; . object.print3; .... ?

  • @UFOBroCaptain
    @UFOBroCaptain 6 років тому

    Заебис

  • @Krainiiserver
    @Krainiiserver 8 років тому +3

    Блин, объяснение неправильное.Ты сам запутался и меня запутал.

    • @notUnclePetro
      @notUnclePetro 7 років тому

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

  • @vladimir_128
    @vladimir_128 7 років тому +2

    более худшего обяснения декоратора я не видел