Назад Вперед Зміст


Патерн Decorator (Декоратор)

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

Переваги патерну:

Приклад: Система оповіщень з декораторами


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("Важливе повідомлення!"));
    }
}

Завдання для практики

Завдання 1: Декоратор для кави

Створіть систему для кавового автомата, де можна додавати інгредієнти (молоко, цукор, вершки) до базової кави.

Вимоги:

Завдання 2: Декоратор для текстового редактора

Реалізуйте систему форматування тексту з можливістю додавати стилі (жирний, курсив, підкреслений).

Вимоги:

Завдання 3: Декоратор для автомобіля

Створіть систему для додавання додаткових опцій до базової комплектації автомобіля.

Вимоги:


Назад Вперед Зміст