수색…


복합 로거

합성 패턴은 객체 그룹을 객체의 단일 인스턴스로 처리 할 수있는 디자인 패턴입니다. 이것은 Gang of Four의 구조 설계 패턴 중 하나입니다.

아래의 예는 단일 로그 호출을 사용하여 여러 위치에 로그하는 데 Composite를 사용하는 방법을 보여줍니다. 이 방법을 준수 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

합성 로거가 중첩 될 수 있다는 것을 언급 할 가치가 있습니다 (합성 로거 생성자에 대한 매개 변수 중 하나는 다른 합성 로거가 될 수 있음)는 트리 구조를 만듭니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow