複合記錄器

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

值得一提的是,複合記錄器可以巢狀(複合記錄器建構函式的一個引數可以是另一個複合記錄器),建立樹狀結構。