Поиск…


Композитный регистратор

Паттерн Composite представляет собой шаблон проектирования, который позволяет обрабатывать группу объектов как один экземпляр объекта. Это один из структур структурного проектирования Gang of Four.

Пример ниже показывает, как Composite может использоваться для входа в несколько мест с использованием одного вызова журнала. Этот подход соответствует принципам SOLID, поскольку он позволяет вам добавить новый механизм регистрации, не нарушая принцип единой ответственности (каждый логгер несет только одну ответственность) или принцип Open / closed (вы можете добавить новый регистратор, который будет регистрироваться на новом месте, добавив новую реализацию и а не путем изменения существующих).

public interface ILogger
{
    void Log(string message);
}

public class CompositeLogger : ILogger
{
    private readonly ILogger[] _loggers;

    public CompositeLogger(params ILogger[] loggers)
    {
        _loggers = loggers;
    }

    public void Log(string message)
    {
        foreach (var logger in _loggers)
        {
            logger.Log(message);
        }
    }
}

public class ConsoleLogger : ILogger
{
    public void Log(string message)
    {
        //log to console
    }
}

public class FileLogger : ILogger
{
    public void Log(string message)
    {
        //log to file
    }
}

var compositeLogger = new CompositeLogger(new ConsoleLogger(), new FileLogger());
compositeLogger.Log("some message"); //this will be invoked both on ConsoleLogger and FileLogger

Стоит отметить, что составные регистраторы могут быть вложенными (одним из параметров в составной конструктор логгеров может быть другой составной регистратор), создающий древовидную структуру.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow