|
0 / 0 / 0
Регистрация: 28.02.2014
Сообщений: 23
|
||||||
Когда следует использовать декораторы?24.08.2024, 13:45. Показов 1509. Ответов 20
Когда следует использовать декораторы?
Когда надо динамически добавлять к объекту новые функциональные возможности. При этом данные возможности могут быть сняты с объекта. ВОПРОС . А как их можно снять ? например такой пример.
0
|
||||||
| 24.08.2024, 13:45 | |
|
Ответы с готовыми решениями:
20
Когда следует использовать значимый тип, а когда ссылочный? Когда нужно использовать структуры, когда классы, а когда словарь? Когда нужно использовать абстрактный класс а когда интерфейс |
|
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
|
||
| 24.08.2024, 14:01 | ||
|
То есть снимается фактически редактированием кода объекта.
0
|
||
|
0 / 0 / 0
Регистрация: 28.02.2014
Сообщений: 23
|
|
| 24.08.2024, 14:18 [ТС] | |
|
А можно пример если не трудно. Я просто не могу не где найти информацию на эту тему.
0
|
|
|
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
|
||
| 24.08.2024, 14:27 | ||
|
ivi_ivi, как по мне у вас не самый удачный пример - декораторы добавляют новую обязанность - а новая цена - это свойство объекта.
Фактически у вас другой тип объекта - пицца с томатами, которая очевидно дороже базовой. На деле же никаких обязанностей этот декоратор не добавляет. Добавлено через 5 минут Добавлено через 1 минуту Сущность - PostService, декоратор - добавляет диагностическую информацию о получении поста (время запроса).
0
|
||
|
Модератор
|
|
| 24.08.2024, 14:27 | |
|
ivi_ivi, дополню IamRain.
Мне кажется здесь для примера подойдёт декоратор "Пицца в упаковке". Разные пиццы в разных упаковках, а объединяет их декоратор. При этом можно "вынуть из упаковки" и будет опять просто пицца.
0
|
|
|
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
|
|
| 24.08.2024, 14:30 | |
|
Или те же репозитории - базовая версия ходит в базу, декоратор - добавлят кэш.
Добавлено через 2 минуты Раз уж за декоратор взялись, попробуйте поискать отличия от Proxy-паттерна.
0
|
|
|
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
|
|||
| 24.08.2024, 14:56 | |||
|
Цепляясь за слова - капот автомобиля, это своего рода фасад. ![]() Добавлено через 1 минуту Добавлено через 2 минуты UoW паттерн - транзакционный фасад над репозиториями, по сути.
0
|
|||
|
Модератор
|
|||||||
| 24.08.2024, 16:35 | |||||||
|
Но в простых случаях, при малом количестве функционала, может превратиться и в Proxy.
0
|
|||||||
|
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
|
||
| 24.08.2024, 16:42 | ||
|
В GoF хорошее определение дается, насколько я помню. Вспомните тот же UoW. Дискутировать не хочу.
0
|
||
|
Модератор
|
||
| 24.08.2024, 16:53 | ||
|
Я к тому, что все эти паттерны на практике могут "перетекать" друг в друга. Есть некие идеальные, абсолютные варианты. Но между ними есть масса промежуточных, когда непонятно к какому собственно паттерну стоит относить эту реализацию. Добавлено через 1 минуту Поэтому следует изучить их все, понимать как их реализовывать, понимать какая разница между ними, но и понимать, что на практике скорее всего придётся делать нечто совмещающее идеи нескольких паттернов.
0
|
||
|
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
|
||
| 24.08.2024, 17:11 | ||
Сообщение было отмечено ivi_ivi как решение
РешениеКороче, в смысловом понимании должно быть нечто большее, чем просто вагончик с шаурмой - несколько подсистем (в оригинале вроде такое именование было в GoF). Во всяком случае, я склоняюсь именно к такому определению.
2
|
||
|
0 / 0 / 0
Регистрация: 28.02.2014
Сообщений: 23
|
|
| 25.08.2024, 17:47 [ТС] | |
|
Добрый день . Но тут кеширование а не снятие обертки декоратора. Я читал что объект создается потом оборачивается N числом дкораторов . Каждый на каждый новый объект создаваемого декоратора выделяется место в памяти и оно там хранится . Вообщем получается один объект оборачивается в другой и можно отменить эту обертку и вернуться к первому состоянию. В моем примере сначала объект будет типа ItalianPizza после обертки тип его изменится на TomatoPizza и после последней обертки тип объекта станет типа CheesePizza. Так вот все созданные объекты хранятся в памяти и можно переходить от например типа обертки CheesePizza к типу ItalianPizz. То есть отменить декорирование объекта и прийти к его начальному состоянию.
Может я где то ошибаюсь и не правильно понял.
0
|
|
|
0 / 0 / 0
Регистрация: 28.02.2014
Сообщений: 23
|
|
| 26.08.2024, 22:55 [ТС] | |
|
Хотелось бы до конца рассмотреть этот паттерн но почему то теоретики которые пишут паттерны не рассматривают этот случай.
0
|
|
|
Модератор
|
|
| 27.08.2024, 01:20 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 28.02.2014
Сообщений: 23
|
|
| 27.08.2024, 11:59 [ТС] | |
|
Привет . Я свой пример и брал отсюда но к сожалению тут только упаковка.
0
|
|
|
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
|
||
| 27.08.2024, 14:39 | ||
|
Читайте GoF и оттуда же примеры смотрите.
0
|
||
|
|
||||||||||
| 27.08.2024, 15:44 | ||||||||||
|
Походу тут проблема вообще не в декораторе, а в голове.
Во всей теме ответа не видел. Да, если оборачивать объекты в объекты в объекты... то их будет много и они будут "живые", а ресурсы выделяться на хранение. Если цели не стоит, то делают оптимизацию. Например, если не нужно "разворачивать" пиццу, то я бы брал только Name и по сути менялось бы только название и цена. Но это просто пример. protected Pizza pizza. Вот и "разворачивайте" цепочку в обратную сторону.- использовать внутренний метод для доступа к protected свойству - или сделать public для этого свойства Ну это всё некрасиво может быть. Только ради примера.
0
|
||||||||||
|
Модератор
|
||
| 28.08.2024, 00:25 | ||
Сообщение было отмечено ivi_ivi как решение
РешениеОсновной вывод оттуда: патер позволяет вместо 9 разных классов, ввести 3 новых классов-декораторов. Поймите, цель паттернов - это не "теоретические выдумки сферических профессоров в вакууме", а упрощение программирования (в первую очередь - коллективного). Если применение паттерна усложняет реализацию, то либо вы не правильно реализовали паттерн, либо выбрали не тот паттерн, либо , вообще, не нужен здесь ни один из типовых паттернов. Конечно. это не относится к периоду обучения, когда искусственно переусложняют реализацию с цель получения опыта.
1
|
||
|
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,095
|
|
| 29.08.2024, 12:26 | |
|
0
|
|
| 29.08.2024, 12:26 | |
|
Помогаю со студенческими работами здесь
20
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|