JavaScript Паттерны. Полный курс (22 паттерна в 1 видео)

  Рет қаралды 67,371

webDev

webDev

Күн бұрын

#YauhenK #webDev #JS #JSPatterns
Всех приветствую в курсе «JavaScript Паттерны».
В данном видео-курсе мы с вами рассмотрим самые распространённые паттерны проектирования, которые используются при разработке.
Паттерны, или шаблоны - это определённые, зарекомендовавшие себя конструкции, которые служат для решения типовых задач программирования.
Рассматривать мы их с вами будем на примере языка JavaScript в синтаксисе ES6.
✒ Timeline:
✔ 0:00 - Введение
✔ 3:32 - Singleton (Одиночка)
✔ 8:21 - Factory Method (Фабричный метод)
✔ 11:28 - Abstract Factory (Абстрактная фабрика)
✔ 15:08 - Prototype (Прототип)
✔ 18:46 - Builder (Строитель)
✔ 23:17 - Decorator (Декоратор)
✔ 27:29 - Facade (Фасад)
✔ 32:08 - Proxy (Заместитель)
✔ 36:10 - Adapter (Адаптер)
✔ 40:24 - Composite (Компоновщик)
✔ 46:30 - Bridge (Мост)
✔ 52:37 - Flyweight (Легковес)
✔ 57:51 - Mediator (Посредник)
✔ 1:02:34 - Iterator (Итератор)
✔ 1:06:14 - Chain of Responsibility (Цепочка обязанностей)
✔ 1:11:55 - Strategy (Стратегия)
✔ 1:16:58 - Memento (Снимок)
✔ 1:20:31 - Template Method (Шаблонный метод)
✔ 1:24:17 - Visitor (Посетитель)
✔ 1:28:05 - Command (Команда)
✔ 1:34:44 - Observer (Наблюдатель)
✔ 1:38:19 - State (Состояние)
✒ Репозиторий курса:
✔ GitHub: github.com/YauhenKavalchuk/de...
✒ Полезные ссылки:
✔ Плейлист по ES6: • ES6
✒ Используемые ресурсы и инструменты:
✔ Carbon (Screenshots): carbon.now.sh/
✒ Полный список готовых и планируемых курсов:
✔ Trello: trello.com/b/R6rD7qq8
✒ Автор курса:
✔ KZbin: / yauhenkavalchuk
✔ Instagram: / yauhenkavalchuk
✔ Twitter: / yauhenkavalchuk
✔ VK: YauhenKavalchuk
✔ LinkedIn: / yauhenkavalchuk
✔ GitHub: github.com/YauhenKavalchuk
✔ VK (Группа): webdevcom
✒ Поддержать развитие канала: github.com/YauhenKavalchuk/yo...

Пікірлер: 142
@Ramosok
@Ramosok Жыл бұрын
Очень помог этот курс подготовиться к собесу, да и вообще все твои ролики помогли стать хорошим jun+ разработчиком.
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
👍
@digitalturkistan1857
@digitalturkistan1857 Жыл бұрын
Евгени очень дорожит подписчиков что ему не трудно ответит каждому комментарии. Спасибо
@Ramosok
@Ramosok Жыл бұрын
Спасибо за твой труд!
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
Спасибо за отзыв
@user-pd6px2ky6f
@user-pd6px2ky6f Жыл бұрын
Большое спасибо за урок! Успехов вам!
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
Пожалуйста
@user-mu7yi5ii6n
@user-mu7yi5ii6n 3 жыл бұрын
Спасибо за видос будем посмотреть))
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Пожалуйста)
@yevhenvictorovich2288
@yevhenvictorovich2288 3 жыл бұрын
Thanks for this video. I've just started to read a book about it.
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
My pleasure
@N7N7N77
@N7N7N77 4 ай бұрын
Спасибо, все прослушала и законспектировала....очень важное видео
@YauhenKavalchuk
@YauhenKavalchuk 4 ай бұрын
Всегда пожалуйста
@user-wz1tn7fn4s
@user-wz1tn7fn4s 3 жыл бұрын
Спасибо, очень удобный формат))
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Пожалуйста
@user-hq3ri7ui7l
@user-hq3ri7ui7l Жыл бұрын
Спасибо за труд, интересно и полезно
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
Пожалуйста
@user-sn2nq2nr8p
@user-sn2nq2nr8p Жыл бұрын
​@@YauhenKavalchuk0:38
@toyotominashimoto9963
@toyotominashimoto9963 2 жыл бұрын
годный урок. кратко и ясно
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
Спасибо)
@oleksandr.ryzhyk
@oleksandr.ryzhyk 3 жыл бұрын
Шикарно! Спасибо большое!
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Пожалуйста
@yurii873
@yurii873 3 жыл бұрын
я еще не смотрел но уже в восторге. Спасибо большое, давным давно хотел разобрать!!!
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Пожалуйста)
@_oxios_
@_oxios_ 3 жыл бұрын
Класс, четко! Мало что понял. Нужно больше практики.
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Спасибо за отзыв)
@JB-sv8oh
@JB-sv8oh 2 жыл бұрын
самое лучшее видео по паттернам
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
Спасибо
@user-rg5tk3sw6v
@user-rg5tk3sw6v 3 жыл бұрын
Спасибо за видео)
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Пожалуйста
@evergreensun7283
@evergreensun7283 3 жыл бұрын
Вы крутой!! Спасибо за видео. Успехов вам
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Спасибо большое)
@filippkotenko851
@filippkotenko851 2 жыл бұрын
Спасибо тебе за труды большое)
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
Пожалуйста
@SvetloeSerdce
@SvetloeSerdce 3 жыл бұрын
мне кажется, я еще не раз посмотрю этот видос)))
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
👍
@Krishtal3
@Krishtal3 Жыл бұрын
Дуже дякую за відео, корисно для всіх рівнів программістів
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
Пожалуйста
@toyotominashimoto9963
@toyotominashimoto9963 2 жыл бұрын
прими мою благодарность, малой. сохраню себе это видео в качестве шпаргалки и руководства на будущее)
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
👍
@nickwhiteman8816
@nickwhiteman8816 3 жыл бұрын
Евгений спасибо большое за этот канал) Буду теперь тебя смотреть)
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Спасибо за отзыв
@uzver3787
@uzver3787 3 жыл бұрын
Чётко! Отличный курс! JavaScript Паттерны
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Благодарю)
@user-oz3wx9uk7b
@user-oz3wx9uk7b 3 жыл бұрын
спасибо, самое понятное что я находил по паттернам
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Пожалуйста)
@Nextspace8bit
@Nextspace8bit 3 жыл бұрын
думаю у меня есть дельное замечание, когда комментируешь код, мог бы его подчеркивать по ходу, уверен восприятие повысится существенно. лайк занес ;)
@yurii873
@yurii873 3 жыл бұрын
Смотрел ваш курс по graphQL - эт супер ))) еще раз спасибо. Надеюсь у вас в Минске все ок, мы все с вами!
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Спасибо за поддержку!
@dianabohomoliuk9191
@dianabohomoliuk9191 3 жыл бұрын
ОГРОМНОЕ тебе спасибо! Ты сделал невероятное - такую сложную тему так круто й просто объяснил. Спасибо, за то, что ты делаешь!)
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Спасибо большое за отзыв 😊
@user-gf9qe9im7r
@user-gf9qe9im7r 2 жыл бұрын
ничего не понятно! материал для новичков объяснен так что и профи не поймет что тут говорят
@Polite_person_
@Polite_person_ 3 жыл бұрын
Спасибо за урок!
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Пожалуйста
@AlexanderYukal
@AlexanderYukal 3 жыл бұрын
5:40 Простите, Евгений, я что-то плохо понял к какому контексту принадлежит переменная instance? Похоже она определяется глобально? Если я не ошибаюсь в строгом режиме такое делать нельзя? 7:54 А вот вижу, просто дальше не досмотрел. Хм, подход интересный, но тогда еще остается проблема с оператором "new", ведь при каждом его вызове будет выделятся память, если я не ошибаюсь.
@hasst9261
@hasst9261 3 жыл бұрын
Отлично
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
👍
@Max-kr4ie
@Max-kr4ie 3 жыл бұрын
Ты крут!
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Спасибо)
@kirillpavlovskii8342
@kirillpavlovskii8342 Жыл бұрын
крутое видео, спасибо
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
Пожалуйста
@vitaliiponomarov1271
@vitaliiponomarov1271 Жыл бұрын
#собеседование #javascript #frontend #html #css #React #Redux видео база, топ, основа.
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
👍
@user-ed5lw8lz2i
@user-ed5lw8lz2i 2 жыл бұрын
Отличное видео, подача материала очень четкая и понятная, спасибо большое. Немножко не понял смысл паттерна Strategy, ну ещё почитаю про него )
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
Пожалуйста
@user-gd8kj4dc1m
@user-gd8kj4dc1m Жыл бұрын
Начал только разбираться. Проверьте, пожалуйста, по-моему в паттерне Singleton закралась опечатка (на 06:36). Установка счетчика в ноль в конструкторе необходимо переместить в блок if. Спасибо.
@user-zk6tw7rj1t
@user-zk6tw7rj1t Жыл бұрын
yes
@abudarovich
@abudarovich Жыл бұрын
в "сохраненные" 🔥
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
👍
@vponochovny
@vponochovny Жыл бұрын
6:35 - А разве не будет if(!instance) выполняться, когда мы впервый раз создали этот класс через new? И получится, что instance будет равно this первого созданного класса? тут я не совсем понимаю как работает
@Rusu421
@Rusu421 Жыл бұрын
Так и должно быть. В первый раз переменная пустая, и мы записываем в нее this. Во второй проверка выдает заполненность переменной и сразу делает возврат существующего объекта. Но у него в этом варианте по бороде пошел весь синглтон, потому что он при каждой инициализации обнуляет счетчик. Можно проверить, инициализировав второй счетчик после повышения первого. Он должен был счетчик и инициализацию внести в фигурные скобки. Во втором, где в начале идет вариант возврата существующего объекта, такого не происходит.
@user-mp2qu2nh9t
@user-mp2qu2nh9t 3 жыл бұрын
Если я правильно понял, то объект команды лучше передавать непосредственно в метод execute водителя - в таком случае один водитель сможет выполнять разные команды. Если же команду передавать в конструктор водителя, то получается "Один водитель - одна команда".
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
Правильно поняли
@user-rd3yd6lh2e
@user-rd3yd6lh2e 2 жыл бұрын
Супер! Огромное спасибо за Вашу работу! Все понятно!
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
Спасибо за отзыв
@user-gf9qe9im7r
@user-gf9qe9im7r 2 жыл бұрын
а мне непонятно, автор очень плохо объясняет материал
@Fresmr
@Fresmr 6 ай бұрын
И тема сегодняшней лекции
@YauhenKavalchuk
@YauhenKavalchuk 6 ай бұрын
👍
@romasbitinas643
@romasbitinas643 Жыл бұрын
Объясните, зачем нужно паттерн Builder, если можно создавать объекты на основе параметров из конструктора, минуя цепочку методов? И кода же меньше выйдет. Или это пример такой простой, а на самом деле в подобные методы фабрики кладут код длиннее, который неудобно помещать в аргументы?
@Nikitosss91
@Nikitosss91 3 жыл бұрын
Ничего не понятно, но очень интересно
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
¯\_(ツ)_/¯
@user-tk7qv9rv2c
@user-tk7qv9rv2c Жыл бұрын
Спасибо за курс, с первого раза (ничего не зная о паттернах), сложно, конечно. Но мне кажется, что и тема эта не для базового уровня?
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
Пожалуйста
@frookkiesilver4805
@frookkiesilver4805 2 жыл бұрын
Обожаю твои видосы, ну ничего лишнего, у других растянуто по часу на каждый паттерн. Как в магазине: я просто хочу посмотреть, что есть в наличии, а консультант начинает затирать какой ахрененный именно "этот" товар.
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
Спасибо за отзыв и на а сравнение)
@serhiimaliuha69
@serhiimaliuha69 3 жыл бұрын
Евгений, можете навести примеры, когда вы используете преведенные паттерны во время разработки на React ?
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Нет не могу. Паттерны в React не используются. Как вариант - очень отдалённо можно сказать что для утилит нормализации данных использую что-то вроде Адаптера. А так, паттерны в основном нужны при разработке на чистом JS
@dreawmy2912
@dreawmy2912 2 жыл бұрын
@@YauhenKavalchuk на чистом js большинство паттернов не нужны или их сложно понять
@user-ew2md8cu8j
@user-ew2md8cu8j Жыл бұрын
@@YauhenKavalchuk а как же HOC в реакте, это же декораторы
@ReAgent003
@ReAgent003 2 жыл бұрын
Спасибо! 01:34:28 а почему водителю не передан класс "onSwitchOffCommand"? Как теперь ему машину глушить?)) Наверное в классе "Driver" надо было разделить логику запуска/останова двигателя? 01:36:58 думаю лучше передавать как можно меньше информации (в данном случае news было бы достаточно) Хорошее видео!
@user-ed5lw8lz2i
@user-ed5lw8lz2i 2 жыл бұрын
Кстати тоже не очень понял. Я назвал класс не Driver, а Command, и тогда можно в его экземпляры передавать как onStartCommand так и onSwitchOffCommand, и тогда более-менее смысл паттерна начинает быть понятным.
@maximevtahov2360
@maximevtahov2360 3 жыл бұрын
спасибо за видео, очень полезно
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Пожалуйста
@artemdovhyi4312
@artemdovhyi4312 2 жыл бұрын
Пришел сюда повторить материал, но совсем запутался Если я не ошибаюсь, говоря о паттерне Фабричный метод ты говорил о простой фабрике, а не о самом патерне Различия в том, что простая фабрика имеет большой условный оператор для создания того или иного продукта, а паттерн создает класс в котором есть пустой метод по созданию продукта с определенным интерфейсом, а подклассы могут его переназначать для создания конкретных продуктов
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
¯\ _(ツ)_/¯
@Prevedov
@Prevedov 3 жыл бұрын
А полные видео по каждому паттерну будут на канале?
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Это видео содержит полный курс по всем паттернам
@Prevedov
@Prevedov 3 жыл бұрын
@@YauhenKavalchuk спасибо!
@zmmr013
@zmmr013 4 ай бұрын
На примере кажется не фабрика нужна а массив обьектов конфигурации с параметрами авто. Пробежавшись по массиву мы также создадим тебе авто, но при этом не придется просить программиста править код классов
@YauhenKavalchuk
@YauhenKavalchuk 4 ай бұрын
🤔возможно, не очень удачный пример
@zet0sfx
@zet0sfx 6 ай бұрын
46:35 Мост - это разве не структурный паттерн? Оговорка?
@YauhenKavalchuk
@YauhenKavalchuk 6 ай бұрын
Да, оговорка
@donottrackmepls
@donottrackmepls Жыл бұрын
В видео показан пример "Simple Factory", а не "Factory Method" - что, кажется, немного "урезает" всю мощь паттерна. Поправьте если я не прав :)
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
Ну, я всё рассказал в видео)
@ridl27
@ridl27 3 жыл бұрын
и да, можно все же было показать и более продвинутые примеры этих паттернов, а не простые, как вы говорите) не недооценивайте силу и желание работяг :D
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Как уж есть
@ridl27
@ridl27 3 жыл бұрын
@@YauhenKavalchuk спасибо и на том) но если у Вас будет время и желание - можете дополнить эту серию уроков :)
@Renarus
@Renarus Жыл бұрын
33:05 «авторизироваться» 😅
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
🙂
@azamatzabirdinov3777
@azamatzabirdinov3777 3 жыл бұрын
Bridge это структурный паттерн
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Да, я оговорился
@alicenNorwood
@alicenNorwood 2 жыл бұрын
41:34 (Компоновщик): - Один исходный класс... - (Чтобы править ими всеми?)
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
Ага)
@iGotton
@iGotton 3 жыл бұрын
+
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
👍
@zigzag2341
@zigzag2341 2 жыл бұрын
Прокси какой-то неправильный, интерфейс же поменялся, т. к оригинальный метод не принимал аргумент с паролем или это норма в JS ? Это самый крутой материал по паттернам, который я встречал
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
Да вроде всё ок. За отзыв, спасибо
@ridl27
@ridl27 3 жыл бұрын
спс. жаль, что в коде на гите не оставили примеры использования этих паттернов. было бы намного лучше и наглядней. особенно когда пересматриваешь чисто код, без видео.
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
В git есть весь код! Посмотрите в ветках
@ridl27
@ridl27 3 жыл бұрын
​@@YauhenKavalchuk да, код именно паттернов есть, но не их использования = практического применения. я об этом))
@alexup7437
@alexup7437 Жыл бұрын
Не совсем понял разницу между декоратором и посетителем
@_lazer_
@_lazer_ 3 жыл бұрын
на JS все это выглядит стремно, без нормального ООП, интерфейсов... :) но для новичков видео однозначно хорошое!
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Да на JS это стрёмно)
@user-ox4yl6gu3u
@user-ox4yl6gu3u 3 жыл бұрын
Кто не умеет писать на JS, для них вообще все стремно. Это язык другого поколения, его нельзя сравнить и сложно понять.
@_lazer_
@_lazer_ 3 жыл бұрын
@@user-ox4yl6gu3u так говорят те кто кроме JS ничего больше не видел :)
@user-ox4yl6gu3u
@user-ox4yl6gu3u 3 жыл бұрын
@@_lazer_ ну если знания ассемблера, Си, Python - это относится, к тем, кто ни чего не видел, то твоя правда!
@miloman1995s
@miloman1995s 7 ай бұрын
я искренне не понимаю, зачем мне паттерные проектирования, работаю 3 года, ощущаю себя middle++/senior.... пользуюсь SOLID, DRY, KISS , FSD archirecture.... но нафига мне паттерны? я не пользуюсь ООП, я пишу в функциональном стиле (да я понимаю что функциональное программирование это что то типа библиотеки ramda.. но в целом и в общем - называю стиль написания функциональным)
@andreigovorukhin
@andreigovorukhin 6 ай бұрын
ощущаешь middle++/senior, но по факту джун - смирись
@Fresmr
@Fresmr 6 ай бұрын
после видео смастирил машину
@YauhenKavalchuk
@YauhenKavalchuk 6 ай бұрын
😁
@suc911
@suc911 Жыл бұрын
Паттерн Composite Вообще не зашёл. Описание древовидное а пример достаточно плоский, может стоило еще 1 уровень добавить ( может body расписать )
@raptorthefirst
@raptorthefirst 3 жыл бұрын
У кого собез в Епаме на этой неделе ?)
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
¯\ _(ツ)_/¯
@bargamut
@bargamut 3 жыл бұрын
У Компоновщика временная метка съехала: должна быть на 40:24
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Спасибо, поправил
@michaelmyers717
@michaelmyers717 Жыл бұрын
А куда ещё один пропал, где 23-й то😁
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
🤷‍♂️😁
@alexandrkurmoyarov4634
@alexandrkurmoyarov4634 2 жыл бұрын
В реализации visitor лишние console.log() вызовы: 1. В exportVisitor не надо писать auto.export = console.log(`Exported data: ${auto.info()}`) Лучше: auto.export = `Exported data: ${auto.info()}` А после ифов return auto.export И в классе Auto: return visitor(this) И потом выводить в консоль console.log(tesla.accept(exportVisitor)) 2. Или оставить все как есть но тогда вызывать без консоли tesla.accept(exportVisitor)). Все равно undefined возвращает.
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
👍
@mrsad6611
@mrsad6611 Жыл бұрын
А чем отличается реализация синглотон паттерна от статического класса. Ведь по сути статический класс сам по себе реализует все задачи singleton. Статичность класса гарантирует что сущность будет одна во всех случаях. Вот например: class Basket { static count = 0; static countUp(){ Basket.count++; } } _______________________________________________ --------------- script.js ---------------------------------- Basket.countUp(); console.log(Basket.count); ----------------- script2.js ___________________ Basket.countUp(); console.log(Basket.count); консоль: 1 2
ECMAScript 2015. Полный курс (ES6)
2:08:05
webDev
Рет қаралды 12 М.
JavaScript Паттерны. Шаблоны проектирования. 17 Примеров
1:54:30
Как быстро замутить ЭлектроСамокат
00:59
ЖЕЛЕЗНЫЙ КОРОЛЬ
Рет қаралды 13 МЛН
Each found a feeling.#Short #Officer Rabbit #angel
00:17
兔子警官
Рет қаралды 6 МЛН
Sprinting with More and More Money
00:29
MrBeast
Рет қаралды 170 МЛН
They RUINED Everything! 😢
00:31
Carter Sharer
Рет қаралды 23 МЛН
Просто о SOLID (Принципы SOLID)
15:54
webDev
Рет қаралды 214 М.
[DesignPatterns] 01. Стратегия
57:22
Georgiy Mogelashvili
Рет қаралды 122 М.
G.R.A.S.P | шаблоны проектирования
12:09
Как быстро замутить ЭлектроСамокат
00:59
ЖЕЛЕЗНЫЙ КОРОЛЬ
Рет қаралды 13 МЛН