Как сейчас с работой '25?
пришлось вспоминать, что такое паттерн декоратор
И как ты напишешь такое с методами расширения?
https://chatgpt.com/s/t_695ce182652881919e5252d050d392d7
// Базовый компонент
public interface IMessageSender
{
void Send(string message);
}
// Конкретный компонент
public class EmailSender : IMessageSender
{
public void Send(string message)
{
Console.WriteLine($"Отправка Email: {message}");
}
}
// Базовый декоратор
public abstract class MessageSenderDecorator : IMessageSender
{
protected readonly IMessageSender _sender;
protected MessageSenderDecorator(IMessageSender sender)
{
_sender = sender;
}
public virtual void Send(string message)
{
_sender.Send(message);
}
}
// Конкретный декоратор
public class LoggingDecorator : MessageSenderDecorator
{
public LoggingDecorator(IMessageSender sender) : base(sender) { }
public override void Send(string message)
{
Console.WriteLine("Логирование отправки...");
base.Send(message);
}
}
// Ещё один декоратор
public class EncryptionDecorator : MessageSenderDecorator
{
public EncryptionDecorator(IMessageSender sender) : base(sender) { }
public override void Send(string message)
{
message = $"ENCRYPTED({message})";
base.Send(message);
}
}
IMessageSender sender =
new LoggingDecorator(
new EncryptionDecorator(
new EmailSender()));
sender.Send("Hello");
Zurück