JavaScript Паттерны #6 - Decorator (Декоратор)

preview_player
Показать описание
#YauhenK #webDev #JS #JSPatterns

Всех приветствую в курсе «JavaScript Паттерны».
В данном видео-курсе мы с вами рассмотрим самые распространённые паттерны проектирования, которые используются при разработке.
Паттерны, или шаблоны - это определённые, зарекомендовавшие себя конструкции, которые служат для решения типовых задач программирования.
Рассматривать мы их с вами будем на примере языка JavaScript в синтаксисе ES6.

✒ Репозиторий курса:

✒ Используемые ресурсы и инструменты:

✒ Полезные ссылки:

✒ Полный список готовых и планируемых курсов:

✒ Автор курса:

Рекомендации по теме
Комментарии
Автор

СПАСИБО ОГРОМНОЕ. Два дня читал какие о невнятные статьи, а тут за 4 минуты все ясно и наглядно! обнял!!!

Vladimir-wwbe
Автор

Дружище, запили серию уроков по алгоритмам и структурам данных, годный курс будет полезен для рунета.

vasilys
Автор

О спасибо, очень полезно, удачи. Просто и понятно.

qgquqqt
Автор

Просто дополнение. Было бы правильнее чтобы классы Autopilot и Parktronic наследовались от одного класса CarDecorator (который бы сам наследовался от Car), который бы по умолчания передавал бы все вызовы методов в инстанс _car. Autopilot и Parktronic в свою очередь переопределяли дефолтное поведение CardDecorator. Таким образом мы создаем **прозрачную** обертку, что в примере на видео не совсем так, потому что если в классе Car добавиться какой-то другой метод, то интерфейсы декораторов и декорируемого класса будут несовместимы. Также в этом примере instanceof Autopilot !== instanceof Car.

andrewvasylchuk
Автор

Сначала прочитал комментарии, потом посмотрел видео. Мне, нубасу с базовым знанием классов, всё было понятно, ничего не смущало.

wellgreat
Автор

супер, еще бы курс по алгоритмам и структурам данных на js, в рунете такого нет почти, во основном все на Джаве, крестах или питон

millisstudio
Автор

Правильно ли понял, что Декоратор применим чисто к расширению объектов, а старое доброе наследование - к расширению класса?

viktorshcheplyagin
Автор

А разве в конструкторах декораторов мы не должны возвращать "return this.car"? Ведь Иначе при таком вызове:
tesla = new Autopilot(tesla);
tesla = new Parktronic(tesla);
получится, что new Parktronic получит не объект tesla, а объект Autopilot, внутри которого лежит объект Tesla

zatoprosto
Автор

В реале так и есть, на одной базе собирают несколько автомобилей. Самый простой пример - седан, купе и т.п.

flipix
Автор

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

SULTANVIDEOGAMES
Автор

Представим что у нас 2 input number поля. Одно нужно сделать дефолтное, а другое с кнопками + и - по бокам и соответственно логично описать взаимодействие кнопок с этим полем. С одной стороны можно экземпляр класса inputnumber обернуть в декоратор inputnumber-plusminus (сорян за говно-нейминг) и как бы там уже навесить кнопки и события. С другой стороны можно отнаследоваться от базового класса inputnumber и также добавить в новый класс всю новую логику при этом сохранится и старая(также появится возможность переопределить методы старого класса на новые если нужно). Какой метод верный?

POEOneLove
Автор

метод getPrice вернет значение с парктроником, но свойство price останется со старым значением

vishnyo
Автор

Зачем декораторы делать в виде классов и еще называть так неочевидно? new Autopilot(carInstance) кажется должен создать экземпляр автопилота, но совсем не очевидно что это будет carInstance.

sharn
Автор

почему в качестве декоратора ты используешь новый клас а не константу, которая будет вызыватся как обычная функция?

artemtarasenko
Автор

А где функциональный декоратор @_@?Это наследывание было логика, как работает декоратор.Но декоратор возвращает либо функцию, либо class.-_-Декоратор хочу по смотреть.Не у кого нету про декоратор.

mikaelgevorgyan
Автор

Пытаюсь понять этот паттерн. Везде говорят, что паттерн меняет функциональность, но не в одном примере в интернете нету добавления нового метода или нового свойства, ипользуя этот метод. Если ты у кого-то пытаешься спросить, то максимум ответ - это просто обёртка. От этого ответа нияего не понятно. Пока я лично пришёл к выводу: 1) паттерн не позволяет добавлять новые методы или свойства. 2) используя его мы можем только расширять существующие методы 3) Конструктор класса декоратор принимает только объект в котором мы хотим расширить уже существующие методы. Прошу поправить меня, если я не прав.

mmbeetn
visit shbcf.ru