Декоратор - структурний патерн проектування, який дозволяє динамічно додавати об'єктам нову функціональність, загортаючи їх у корисні "обгортки".
using System; // Базовий інтерфейс компонента public interface INotifier { string Send(string message); } // Конкретний компонент public class EmailNotifier : INotifier { public string Send(string message) { return $"Відправлено email: {message}"; } } // Базовий декоратор public abstract class NotifierDecorator : INotifier { protected INotifier _notifier; public NotifierDecorator(INotifier notifier) { _notifier = notifier; } public virtual string Send(string message) { return _notifier.Send(message); } } // Конкретні декоратори public class SMSDecorator : NotifierDecorator { public SMSDecorator(INotifier notifier) : base(notifier) {} public override string Send(string message) { return $"{base.Send(message)}\nВідправлено SMS: {message}"; } } public class FacebookDecorator : NotifierDecorator { public FacebookDecorator(INotifier notifier) : base(notifier) {} public override string Send(string message) { return $"{base.Send(message)}\nВідправлено Facebook повідомлення: {message}"; } } public class SlackDecorator : NotifierDecorator { public SlackDecorator(INotifier notifier) : base(notifier) {} public override string Send(string message) { return $"{base.Send(message)}\nВідправлено Slack повідомлення: {message}"; } } // Використання class Program { static void Main(string[] args) { INotifier notifier = new EmailNotifier(); // Додаємо декоратори notifier = new SMSDecorator(notifier); notifier = new FacebookDecorator(notifier); notifier = new SlackDecorator(notifier); Console.WriteLine(notifier.Send("Важливе повідомлення!")); } }
Створіть систему для кавового автомата, де можна додавати інгредієнти (молоко, цукор, вершки) до базової кави.
Вимоги:
ICoffee з методом GetCost() і GetDescription()Реалізуйте систему форматування тексту з можливістю додавати стилі (жирний, курсив, підкреслений).
Вимоги:
IText з методом Format()Створіть систему для додавання додаткових опцій до базової комплектації автомобіля.
Вимоги:
ICar з методами для отримання ціни та опису