TGViewer
Библиотека шарписта | C#, F#, .NET, ASP.NET Библиотека шарписта | C#, F#, .NET, ASP.NET @csharpproglib · 21.6K subscribers
Post #5427 5.3K
🎨✨ Паттерн "Декоратор" — динамическое улучшение вашего кода!

🔍 Что это?
Decorator — это структурный паттерн, который позволяет динамически добавлять объекту новую функциональность. Вместо создания бесконечных подклассов, вы оборачиваете объект в "декораторы".

🛠 Как это работает?
1️⃣ Есть базовый компонент с определенным интерфейсом.
2️⃣ Декоратор реализует этот же интерфейс, добавляя новые возможности.
3️⃣ Оборачивая объект в декораторы, вы комбинируете функции так, как вам нужно!

✏️ Пример:
Представьте текстовый редактор:

Базовый объект — текст.
Один декоратор добавляет подсветку синтаксиса.
Другой — проверку орфографии.
IText plainText = new PlainText("Hello, world!");
IText highlightedText = new SyntaxHighlighter(plainText);
IText spellCheckedText = new SpellChecker(highlightedText);

Console.WriteLine(spellCheckedText.GetContent());
// [Spell Checked] [Syntax Highlighted] Hello, world!


🤔 Когда использовать?
➖ Когда нужно добавить функционал без изменения кода объекта.
➖ Если у вас слишком много подклассов.
➖ Когда нужна гибкость в конфигурации объекта.
  • 👍 8
More from @csharpproglib
  1. Oct 13, 2026🚀 C# Dev Kit: сначала открытый файл, потом весь solution Открыли большой solution и ждёте…
  2. Oct 12, 2026👀 Как вы смотрите видео? Разбираете урок, слушаете интервью фоном или начинаете на телефо…
  3. Oct 10, 2026Post #7285
  4. Oct 10, 2026Перенос MiniJinja с Rust на Go силами Opus и Codex Около десяти часов работы агента и прим…
  5. Sep 30, 2026📝 Логирование со строковой интерполяцией Логирование c интерполяцией строк один из самых…
  6. Sep 28, 2026👨‍💻 Не показывайте технические ошибки пользователям Когда приложение падает с необработа…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →