复合记录器
Composite 模式是一种设计模式,允许将一组对象视为对象的单个实例。它是 Gang of Four 的结构设计模式之一。
下面的示例演示了如何使用 Composite 来使用单个 Log 调用来记录到多个位置。这种方法遵循 SOLID 原则, 因为它允许你添加新的日志记录机制而不违反单一责任原则 (每个记录器只有一个责任)或开放/封闭原则 (你可以添加新的记录器,通过添加新的实现和日志记录到新的位置而不是通过修改现有的)。
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
值得一提的是,复合记录器可以嵌套(复合记录器构造函数的一个参数可以是另一个复合记录器),创建树状结构。