Szukaj…


Rejestrator kompozytowy

Wzorzec złożony to wzorzec projektowy, który pozwala traktować grupę obiektów jako pojedyncze wystąpienie obiektu. Jest to jeden z wzorów konstrukcyjnych Gangu Czterech.

Poniższy przykład pokazuje, w jaki sposób można użyć Composite do rejestrowania się w wielu miejscach za pomocą pojedynczego wywołania dziennika. Podejście to jest zgodne z zasadami SOLID, ponieważ pozwala na dodanie nowego mechanizmu rejestrowania bez naruszania zasady Pojedynczej odpowiedzialności (każdy logger ma tylko jedną odpowiedzialność) lub zasady Otwartej / zamkniętej (Można dodać nowy rejestrator, który będzie logował się w nowym miejscu poprzez dodanie nowej implementacji i nie poprzez modyfikację istniejących).

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

Warto wspomnieć, że kompozytowe rejestratory mogą być zagnieżdżone (jednym z parametrów konstruktora rejestratorów złożonych może być inny rejestrator złożony), tworząc strukturę drzewiastą.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow