Декоратор - структурний патерн проектування, який дозволяє динамічно додавати об'єктам нову функціональність, загортаючи їх у корисні "обгортки".
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 з методами для отримання ціни та опису