Suche…


Zusammengesetzter Logger

Das Composite-Muster ist ein Entwurfsmuster, mit dem eine Gruppe von Objekten als einzelne Instanz eines Objekts behandelt werden kann. Es ist eines der strukturellen Entwurfsmuster der Viererbande.

Das folgende Beispiel zeigt, wie Composite verwendet werden kann, um mit einem einzigen Protokollaufruf an mehreren Orten zu protokollieren. Dieser Ansatz folgt den SOLID-Grundsätzen, da Sie damit einen neuen Protokollierungsmechanismus hinzufügen können, ohne das Prinzip der Einzelverantwortung (jeder Logger hat nur eine Verantwortung) oder das Open / Closed-Prinzip (Sie können einen neuen Logger hinzufügen, der an einem neuen Ort protokolliert wird, indem Sie neue Implementierungen und hinzufügen nicht durch Modifizieren bestehender).

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

Es ist erwähnenswert, dass zusammengesetzte Logger geschachtelt werden können (einer der Parameter für den Konstruktor für zusammengesetzte Logger kann ein anderer zusammengesetzter Logger sein), der eine baumartige Struktur erzeugt.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow