複合記錄器
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
值得一提的是,複合記錄器可以巢狀(複合記錄器建構函式的一個引數可以是另一個複合記錄器),建立樹狀結構。