- Видео 53
- Просмотров 11 639
FoxOwlet IT
Украина
Добавлен 30 апр 2023
Розбираємо програмування, Java та повʼязані технології
Огляд HTTP методів | Web dev #5
Розбираємо всі методи HTTP протоколу, їх призначення та властивості.
00:00 Intro
00:45 Структура HTTP запиту
04:10 HTTP методи
06:57 Властивості HTTP методів
09:24 Safe методи
11:11 Prefetch концепція
13:47 Idempotent методи
17:58 Cacheable методи
24:45 Метод GET
27:06 Метод HEAD
29:38 Метод POST
31:39 Кешування POST методів
34:14 Метод PUT
39:17 Метод DELETE
41:07 Метод CONNECT
43:36 Метод OPTIONS
45:39 Метод TRACE
47:28 Метод PATCH
49:34 POST vs PUT vs PATCH
53:45 Властивості методів як вимоги до реалізації серверу
#foxowlet #webdevelopment #http
00:00 Intro
00:45 Структура HTTP запиту
04:10 HTTP методи
06:57 Властивості HTTP методів
09:24 Safe методи
11:11 Prefetch концепція
13:47 Idempotent методи
17:58 Cacheable методи
24:45 Метод GET
27:06 Метод HEAD
29:38 Метод POST
31:39 Кешування POST методів
34:14 Метод PUT
39:17 Метод DELETE
41:07 Метод CONNECT
43:36 Метод OPTIONS
45:39 Метод TRACE
47:28 Метод PATCH
49:34 POST vs PUT vs PATCH
53:45 Властивості методів як вимоги до реалізації серверу
#foxowlet #webdevelopment #http
Просмотров: 233
Видео
Spring Boot веб сервер | Web dev #4
Просмотров 1074 месяца назад
Пишемо простий веб сервер з використанням Spring MVC, Spring Boot та Thymeleaf. 00:00 Intro 02:36 Підключаємо Spring Boot 06:29 Шаблон MVC 09:30 Простий веб сервер з inline веб сторінкою 13:16 Статичний веб сервер 17:10 Конфігурація веб серверу 20:49 Шаблонн веб сторінки: Thymeleaf 32:43 Диспатчинг запиту по HTTP методу 34:00 Переходи між сторінками 37:43 Підсумки #foxowlet #java #webdevelopmen...
Рефакторинг HTTP сервера | Web dev #3
Просмотров 1014 месяца назад
Покращуємо наш самописний веб сервер: додаємо підтримку завантаження веб сторінок з файлів, реалізовуємо шаблонн сторінки. Код проекту: github.com/FoxOwlet/http-server 00:00 Intro 01:42 Робота з хедерами 09:12 Абстракція веб ресурсу 14:49 Читаємо веб сторінку з ресурсного файлу 21:12 Динамічно змінюємо веб сторінку 26:04 Динамічно додаємо нов веб сторінки 45:16 Шаблонн веб сторінки та передача ...
Пишемо свій HTTP веб-сервер | Web dev #2
Просмотров 1,2 тыс.4 месяца назад
Розбираємось, як працює HTTP протокол та пишемо свій простий веб сервер, який може взаємодіяти з браузером. Код проекту: github.com/FoxOwlet/http-server 00:00 Intro 00:46 Теоретична база 04:40 Пишемо TCP сервер 10:27 Розбираємо HTTP запити (HTTP request) 17:40 HTTP відповідь (HTTP request) 32:47 Рефакторимо наш сервер: клас HttpRequest 46:15 Error 404 48:07 Рефакторимо наш сервер: клас HttpResp...
Мережні протоколи: TCP та UDP | Web dev #1
Просмотров 3325 месяцев назад
Розбираємось, що таке протоколи, навіщо вони потрібн та як бувають. Пишемо сервер та клієнт до нього на баз протоколу UDP. 00:00 Intro 01:03 Концепція протоколу 04:09 Протокол на приклад серверу з попереднього відео 08:20 Протоколи транспортного рівня 09:53 Протокол TCP 17:42 Протокол UDP 26:51 Протокол IP 29:52 Взаємодія протоколів 32:38 Практика: пишемо сервер та клієнт на баз UDP протоколу 4...
Клієнт-серверна взаємодія на сокетах | Web dev #0
Просмотров 2175 месяцев назад
Розбираємось, як програми взаємодіють одна з одною, пишемо свій сервер та клієнт для нього використовуючи сокети. 00:00 Intro 01:46 Ліричний відступ: взаємодія фізичних пристроїв 05:47 "Віртуальні" порти 08:15 Переходимо до практики: пишемо свій сервер 15:15 Пишемо свій клієнт 25:51 Запускаємо тестуємо 32:09 Покращуємо наш сервер: підтримка декількох клієнтів послідовно 50:31 Покращуємо сервер...
Юніт-тестування, Mockito і всяке різне
Просмотров 1275 месяцев назад
Поговоримо про тестування класів з залежностями, проблеми, як при цьому виникають та як їх вирішувати за допомогою моків. Розберемось, що таке юніт-тестування, чим воно відрізняється від інтеграційного, чим воно важливе та чому неможливе без використання моків. Потикаємо Mockito framework подивимось, як легко створювати та налаштовувати моки з його допомогою. 00:00 Intro 01:38 Згадуємо, як виг...
Поліморфізм та перший інтерфейс | FOL Project
Просмотров 525 месяцев назад
Додаємо підтримку інтерфейсів у власну мову програмування, робимо функцію print поліморфною. Код проекту: github.com/FoxOwlet/FOL/tree/fol-11 Зміни у вигляд пул реквесту: github.com/FoxOwlet/FOL/pull/18 00:00 Intro 02:41 Суть проблеми 07:06 Моделюємо трейти (інтерфейси) 16:54 Пишемо перший трейт 22:46 Реалізуємо новий трейт в існуючих типах 51:43 Запуск інтерпретатора та фінальн фікси 56:50 Під...
Розширення можливостей тестів через JUnit Extensions
Просмотров 845 месяцев назад
Розбираємо JUnit Extensions - що це таке, навіщо потрібне, як працює та як з ними працювати. Бонусом - трохи Reflection API. 00:00 Intro 00:43 Що таке extensions 01:14 Яку проблему вирішують JUnit Extensions 12:56 Практика: пишемо свої екстеншени 18:25 Взаємодія з полями тестового класу 24:03 Бонус: конфігурація екстеншену через аннотації 27:36 Параметризація ектеншенів "напряму" 31:13 Підсумки...
Базовий огляд JUnit 5 за 75 хвилин
Просмотров 2397 месяцев назад
Поговоримо про JUnit, розберемо, як його використовувати для написання автоматизованих тестів, як тести ми можемо писати та як це все працює під капотом. 00:00 Intro 01:07 Що ми будемо тестувати 01:59 Переходимо до тестування: додаємо залежності 02:58 Пишемо перш тести 10:10 Запуск тестів в IDEA 11:26 Життєвий цикл тестів: @TestInstance 18:42 Порядок запуску тестів 22:51 Більше про Lifecycle.PE...
Тестування на Java для новачків: базові концепції
Просмотров 2208 месяцев назад
Поговоримо про тестування, розберемось, що це, навіщо потрібне та що нам дає, напишемо свої найпростіш автоматизован тести без використання сторонніх бібліотек 00:00 Intro 00:55 Що таке тестування 01:30 Тестування Hello World 02:45 Проблеми тестування "очима" 10:26 Вихід є: автоматизація тестування 12:46 Пишемо найпростіший автотест 19:54 Параметризуємо код запуску 23:22 Тести як гарантія праце...
Базовий огляд Spring Boot
Просмотров 3139 месяцев назад
Розбираємо Spring Boot на практиці: переписуємо проект, використовуємо стартери, автоконфігурації та профілі. Перша частина (Spring Core): ruclips.net/video/X7IhG45X55s/видео.html Код проекту: github.com/FoxOwlet/Spring-demo 00:00 Intro 00:27 Огляд проекту 03:17 Зміни в проект: створення контексту через конструктор 09:06 Зміни в проект: аннотація PostConstruct 10:42 Зміни в проект: Spring JDBC ...
Рядковий тип (String) | FOL Project
Просмотров 639 месяцев назад
Додаємо підтримку рядків у власну мову програмування Код проекту: github.com/FoxOwlet/FOL/tree/fol-10 Зміни у вигляд пул реквесту: github.com/FoxOwlet/FOL/pull/16 00:00 Intro 00:36 Суть проблеми з існуючими типами 05:09 Підтримка рядків в граматиці 09:09 Інтерпретація рядкових літералів 10:17 Підтримка рядкового типу 13:00 Ускладнюємо інтерпретацію літералів 15:30 Тестуємо та розширюємо реаліза...
Maven: конфлікти версій та управління залежностями
Просмотров 7610 месяцев назад
Продовжуємо говорити про Apache Maven, розбираємо мультимодульн проекти та наслідування проектів, управління версіями залежностей та їх конфлікти. Попереднє відео по maven: ruclips.net/video/zt-2rPf3u-o/видео.html 00:00 Intro 00:32 Мультимодульн проекти 03:04 Види артефактів та тег packaging 07:17 Робота з мультимодульним проектом 08:48 Використання модуля в якост залежності 16:19 Наслідування ...
Асоціативність операторів та консольні утиліти | FOL Project
Просмотров 4910 месяцев назад
Розбираємо граматику Java, виправляємо проблеми в граматиц FOL, пишемо повноцінний консольний інтерпретатор та простий REPL. Код проекту: github.com/FoxOwlet/FOL/tree/fol-09 Зміни у вигляд пул реквесту: github.com/FoxOwlet/FOL/pull/14 00:00 Intro 00:40 Проблема асоціативност операторів 06:32 Розбираємо граматику Java 14:45 Правимо граматику FOL 21:16 Консольний інтерпретатор файлів 27:44 Збирає...
Логічний тип та нативні функції | FOL Project
Просмотров 3211 месяцев назад
Логічний тип та нативн функції | FOL Project
ANTLR: кодогенерація та парсери | FOL Project
Просмотров 10811 месяцев назад
ANTLR: кодогенерація та парсери | FOL Project
Дизайн патерн Builder - конструктор на максималках
Просмотров 12211 месяцев назад
Дизайн патерн Builder - конструктор на максималках
Вказівники на структури | FOL Project
Просмотров 8111 месяцев назад
Вказівники на структури | FOL Project
Повний гайд по дебагу в IntelliJ IDEA
Просмотров 31611 месяцев назад
Повний гайд по дебагу в IntelliJ IDEA
Робота з полями структур | FOL Project
Просмотров 8211 месяцев назад
Робота з полями структур | FOL Project
Дизайн патерн Composite - ієрархії обʼєктів та консольне меню
Просмотров 120Год назад
Дизайн патерн Composite - ієрархії обʼєктів та консольне меню
Реалізація структур (struct) в мові програмування | FOL Project
Просмотров 213Год назад
Реалізація структур (struct) в мов програмування | FOL Project
Дизайн патерн Decorator - ООП без наслідування
Просмотров 203Год назад
Дизайн патерн Decorator - ООП без наслідування
Параметри та аргументи функцій, області видимості | FOL Project
Просмотров 93Год назад
Параметри та аргументи функцій, област видимост | FOL Project
Що не так з функціоналкою в Java або чому в Java немає функціонального програмування
Просмотров 204Год назад
Що не так з функціоналкою в Java або чому в Java немає функціонального програмування
Інтерпретація функцій та функціональна парадигма | FOL Project
Просмотров 84Год назад
Інтерпретація функцій та функціональна парадигма | FOL Project
Модульний інтерпретатор | Рефакторинг | FOL Project
Просмотров 109Год назад
Модульний інтерпретатор | Рефакторинг | FOL Project
Proxy - дизайн патерн, без якого неможливий Spring framework
Просмотров 207Год назад
Proxy - дизайн патерн, без якого неможливий Spring framework
Добрий день! Дякую за відео, але ... Це звісно не принципово, але бажано більш уважно приводити приклади. Наприклад, тіло запиту, яке приведено напочатку відео, ніколи не спрацює із-за невірно вказаних лапків.
А що з ними не так?_)
Мда. Воно реально валідацію не проходить. Виявляється, в мене автозаміна лапок була включена. Дякую :)
Топчик, як завжди
Дякую за Вашу роботу!
Залишилось ще попросити частіше випускати нові відео ))
І так часу нормально не вистачає :(
Браво!!! Так довго чекав чогось подібного )))) продовжуйте тему Spring буду надзвичайно вдячний!!!
На пару відео ще відкочусь на щось більш низькорівневе. А тоді назад в спрінг
Круто. Я бекендер і не те щоб щось було нове і я не здогадувався як воно працює. Та й писати свій http сервер нема ніякої потреби. Зате добра ідея попрокрастинувати на вихідний, і написати, наприклад на С ))
Вбити вихідні на те, аби написати щось цікаве, але нікому не потрібне - то святе :)
Привіт, практикуєш менторство, за якою ціною? Посилань на контакти на каналі не знайшов, тому питаю тут:)
Привіт. Напряму - скоріше поки ні. А так - foxminded.ua/java-1/. Якщо треба контакт - t.me/black220sun
Круто! Дуже детальне і цікаве пояснення! Дякую, що створюєш такий класний контент🔥
Дякую за круте відео! Сподобалося порівняння фізичного порта(USB і т.д.) з мережевим портом. Ніколи про це не думав у такому ключі
Я раніше теж не задумувався. А потім рандомно прийшло в голову, і аж захотілось це в відео засунути😅
Дуже цікаво, все конспектую щоб не забудь. Дякую за відео
дякую за класне та інформативне відео без води, рівень уваги до деталей just right!
цікаво було подивитися для розширення кругозору
Я взагалі-то джаваскріптизер, але подивився для загального розвинення. Досить цікаво розповідаєш, продовжуй!
Ну отакі "базові" штуки в принципі достатньо загальні і не сильно від мови залежать. Круто, що не лише джавістам цікаво_)
Дякую
Дякую. Супер пояснення про залежності від інших класів
привітик! відео чудове та інформативне, але не для "новачків", якщо воно таким мало бути я особисто, як людина котра лише починає вивчення джави, фактично, на жаль, не можу з легкістю розуміти та запам'ятовувати всю інформацію з такою швидкістю:\ (хоча варто додати, що це важливо, і контент такого роду дуже і дуже потрібен)
Технічно, воно мало б бути "для новачків". Але я коли відео знімаю, я виходжу з того, що людина, яка буде дивитися його, знає все (ну або все, що потрібно) з того, що було в вже відзнятих відео Ну а саме тут мені і самому здавалось, що воно в результаті якось сильно заплутано і не дуже "просто" вийшло. Але вже як є :shrug:
араквіель топ
Прекрасно!!! Дякую ))) починаю дивитись ))
Коментар в підтримку прекрасного контенту ❤
Дякую_)
Можливо я десь пропустив, але стало цікаво навіщо своя мова? Щоб глибше зрозуміти принципи побудови інших???
Я чотири з копійками роки розробкою трансляторів займався. Мені це просто подобається_) Місцями - так, спробувати реалізувати руками якісь фічі інших мов. Місцями - просто аби згадати щось, з чим я працював. Місцями - показати, як це працює "під капотом"
Дякую за корисний контент
Забивати точно не потрібно ) дуже чекаємо на нові відео )) особисто я про Spring )
Та щось все руки до ютубу не доходили, буду виправлятись_) По Spring'у щось конкретне цікавить?
Дякую, дуже цікаво та інформативно, чекаю на наступне відео)
Дякую за корисний контент!
Дуже дякую за відео!!! А буде ще продовження по Springy?
Планується. Але в мене зараз щось то часу немає, то натхнення...
@@FoxOwlet-IT Будемо сподіватись й тоді чекати ) Наснаги вам!
Дякую за контент. Скачав проект роблю так саме, но "Error creating bean with name 'pipeline': Invocation of init method failed". У вас проект висвітлються як Application в настройках, а в мене Spring boot
> Invocation of init method failed Це щось дивне. Якщо проблема в тому, про що я думаю (профілі) - мала б бути інша помилка. > У вас проект висвітлються як Application в настройках, а в мене Spring boot Можна змінити конфігурацію запуску. Але і з спрінг бутовою конфігурацією має працювати, просто треба включити один з профілів, або flowerShop, або fruitShop, аби в контекст всі необхідні біни потрапили. Це можна зробити або параметром командного рядка в стантарній Application конфігурації (як у відео), або в тій же ран конфігурації Spring boot вказати (ну або через мавен чи проперті файл)
Дякую
Дякую
Дякую за корисний матеріал. Є шанс що проект буде на гітхабі? Хотілося б детальніше подивитися в деякі місця у коді
Точно, дякую. Забув лінки в опис додати. github.com/FoxOwlet/Spring-demo
Дякую! Дуже цікавий матеріал! Якщо можливо врахувати побажання, хотілось би попросити більше відео по Spring та його компонентам! Заздалегідь вдячний!!!
Якраз є в найближчих планах Spring Test, MVC та Boot А побажання - так, стараюсь враховувати_)
@@FoxOwlet-IT Тоді з нетерепінням чекаємо )
З новим роком! Дуже дякую за вашу роботу, не зупиняйтесь!
Happy New Year_)
Дякую за чудові відео головне не зупиняйтесь. Дуже чекаю наступні відео.
О maven цікаво, і хороший навик.
Починаю дивитися цю серію відео. Дуже сповідаюся що плани реалізувалися, бо якщо реалізувалися - то буде дуже цікаво.
Там ще що планів, що роботи - на пару років такими темпами😅 Але зараз вже в принципі готовий невеличкий інтерпретатор плюс базові конструкції - числа, арифметичні операції, змінні, функції, структури
Маштаб не той, з телефона перед сном не подивитись нормально)
Треба було ще про дефолту імплементацію в інтерфейсі в цьому відео показвти
Ну, туди вже не влізе... А от в окреме відео, разом з відмінностями інтерфейсу і абстрактного класу - можна буде_)
На мою думку (це лише моя думка) Builder справді стає потрібним коли не просто конструктор з багатьма параметрами, а декілька конструкторів з багатьма параметрами. От тоді замість цих конструкторів і робити білдер, випадок про який як раз була розповідь в «Дефолтні значення в білдері». От уявіть як присвоїти Locale.getDefault().getDisplayCountry() без білдера.
Так, може я це в відео не так подав, але з мого боку білдер вирішує (в перших прикладах) не скільки проблему великої кількості параметрів, скільки того, що в них однакові типи і ми можемо переплутати їх і передати щось "не туди" Якщо в нас, умовно, 10 параметрів, і всі різного типу - в нас такої проблеми немає. І білдер буде скоріше шкідливим. Ми не вирішуємо жодної проблеми, а лише ускладнюємо систему і робимо її більш вразливою до багів (складніше гарантувати, що ми передали всі значення, які треба) Ну і в загальному випадку - білдер вирішує проблему створення складних об'єктів, роблячи цей процес створення "покроковим". Якщо в нас немає ніякої проблеми з цим (або ми її не бачимо) - білдер нам не потрібний Інше питання, що завдяки ломбоку, білдер стає "швидким" і простим рішенням. І його можуть "на автоматі" додати просто аби був
Привіт, дякую за відео. В мене питання. Пару місяців тому я експериментував/освоював білдер, находив різні приклади і вони виглядять як і в тебе(або ломбок), але я реалізував(сам дійшов) до іншого вигляду, і я розумію що тут всі праві а я щось пропускаю бо я бачу переваги(не бачу недоліків) свого білдера над іншим. Реалізація : private User(){}; private String name="Default Name"; public static class UserBuilder{ private User that; public UserBuilder(){ that=new User(); } UserBuilder name(String name){ that.name=name; return this; } User build(){ return that; } Переваги : 1) завжди є значення за замовченням. 2) не дублюються поля, в білдері їх зазвичай багато, а коли і юзерів багато то бере це памяті не мало. Що саме я пропускаю? Дякую.
Привіт TL;DR; З точки зору теорії - такий білдер програє за рахунок того, що юзер має бути мутабельним. З точки зору практики - в більшості випадків юзер і так буде мутабельним, тому це не проблема Ну і плюс цей білдер одноразовий, його інстанс не можна безпечно перевикористати Розгорнуто: Ось такий білдер простіший, так. Але є нюанс. Об'єкт, який створюється - потенційно мутабельний. В гіршому випадку в нас буде публічний сеттер (окей, хібернейт і інші фреймворки, які вимагають сеттер - окрема тема). А білдер дозволяє тримати мутабельний стан окремо від об'єкту, який він створює. Відповідно, у нас є гарантія, що після створення об'єкт вже не зміниться. А з іммутабельними об'єктами працювати простіше, вони безпечніші і призводять до меншої кількості проблем, особливо в багатопоточному середовищі. Це можна виправити приватним сеттером (ну або сетити в поле, що практично те саме). Або package-private сеттер. Суть та ж сама, просто потенційно більше класів можуть мати доступ до стану, це якось не по-ООПшному Проблема номер два. Стан об'єкту по суті зберігається в білдері. Якщо використати інстанс цього білдера для створення двох об'єктів... Результат навряд буде очікуваним - старий об'єкт теж зміниться. А це може бути не дуже приємно дебажити. Хороший білдер має або повертати новий об'єкт кожен раз, або бути одноразовим і при другому зверненні кидати ексепшн Але є простий варіант, як позбавити останньої проблеми твій білдер public User build() { User result = that; that = new User(); return result; } Але все ще лишається проблема потенційної мутабельності юзера Сказати, що це проблема - важко, бо, знов таки, хібернейт вміє працювати лише з мутабельними сутностями. Тому хочеш-не хочеш, а публічний сеттер робити доведеться (ну, не беремо до увагі ті унікальні проекти, де джава юзається без спрінга і хібера) Тут (з хібером) такий білдер скоріше має право на життя Білдер, який дублює стан (знов таки, в теорії) безпечніший. А ломбок якраз і "хороший" тим, що приховує це дублювання від нас. А оскільки він код генерує сам, нам не треба синхронізувати наші зміни в двох класах. Тому по суті дублювання є лише в результуючому коді, але не в сорцях. Відповідно, ніяких проблем, які властиві дублюванню коду, це не несе
@@FoxOwlet-ITДякую за таку розгорнуту відповідь, осягнув поки не все але зачерпнув багато. Ще мабуть "вузьке місце" щоб від створення that аж до методу build() цей стан що зберігається в білдері не змінувався де інде(в іншому потоці). Короче все воно добре "звідси аж до.. " потрібно знати де і коли використовувати і коли є своя реалізація можуть бути свої(не очевидні для гугла наприклад) проблеми/виключення. 👍
Ну проблема багатопоточності скоріше для будь-якого білдера буде актуальною, незалежно від реалізації. Але зазвичай білдер між потоками і шарити немає сенсу. Це ж по суті те саме, що намагатися виконання конструктора рознести на декілька потоків, що особливого сенсу не має
@@FoxOwlet-IT доречі, зараз подивився як я там тоді писав, я писав без сеттерів (внутрішній статичний клас бачить приватні поля, коли писав не задумовувався тому і перевірив зараз).
Топ контент) все просто і зрозуміло
Це добре_) Я відоси в першу чергу і хочу простими і зрозумілими робити. Якщо виходить - вже непогано_)
О шаблони проєктування, а потім і про SOLID можливо щось буде Дякую.
Так, до SOLIDу теж колись руки дійдуть_)
Гарна і структурована інформація. Трошки дозволила розширити горизонти. Додам що також можна користатись з ALT + Клік на виклику функції. Наприклад, щоб не писати в експессіон isLarge(result) можна було клікнути з ALT і одразу побачити інформацію. Також, при дебагу можна міняти стан об'єкта просто клікнувши на нього і через Ф2 встановити необхідне вам значення. Можливо хтось знає, якщо я дебажу внутрішні класи через декомпілятор, і отримую повідомлення що байткод не співпадає з теперішнім рядком, якось це можна оминути? В основному це отримувую на циклах foreach де декомпілятор їх імплементує через ітератор.
Уф, про ALT - це прям вогонь, дякую_) А з приводу декомпілятора - якщо це залежність з мавену, (зазвичай) ідея пропонує сорці скачати. Тоді проблема має зникнути В мене з цим постійно схожа проблема - в стектрейсі номер рядка відрізняється завжди через відсутність коментарів Це якщо це про залежності. Якщо саме про внутрішні (inner) класи - я особисто не в курсі
Дякую Вам за такі відео-уроки.
Хороша подача матеріалу. Не планується відео по java FX?
Навряд... Я з ним особливо ніколи не працював, розказувати немає чого_)
це дуже круто !)
Дяка))
Доступна та цікава подача матеріалу. Хай квітне український ютуб!
Як завжди дуже доступна подача матеріалу, дякую! Удачі Вам і Вашому каналу! ❤
Дуже Дякую!
Вітаю! Never give up!
Дякую_)
Це декоратор чи проксі: а хрін його знає )) 1. Це декоратор бо він додає нову функціональність: повторювати багато разів. А ще він не знає до об’єкту якого саме класу додає, знає тільки до якого інтерфейсу. 2. Це проксі бо керує скільки разів буде викликаний метод «внутрішнього класу», а саме: багато разів. А декоратор завжди повинен викликати метод «внутрішнього класу» один раз.
Проксі теж додає якусь нову функціональність. Інакше в ньому не було б сенсу. Тому це не те, що має бути ключовою відмінністю_) А от те, що цей клас "керує" життєвим циклом (кількістю викликів методу) - в принципі важливий і досить суттєвий момент
Дякую за якісну подачу матеріалу!