Design patterns
Wzór złożony
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ą.