Design patterns
Sammansatt mönster
Sök…
Sammansatt logger
Kompositmönstret är ett designmönster som gör det möjligt att behandla en grupp objekt som en enda instans av ett objekt. Det är en av Gang of Fours strukturella mönster.
Exempel nedan visar hur komposit kan användas för att logga till flera platser med hjälp av en enda log-invokation. Den här metoden följer SOLID-principer eftersom den tillåter dig att lägga till en ny loggningsmekanism utan att bryta mot principen om ett enda ansvar (varje logger har bara ett ansvar) eller öppen / stängd princip (du kan lägga till ny logger som loggar till en ny plats genom att lägga till ny implementering och inte genom att modifiera befintliga).
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
Det är värt att nämna att kompositloggar kan kapslas (en av parametrarna för kompositloggarkonstruktör kan vara en annan sammansatt logger) som skapar trädliknande struktur.