Design patterns                
            コンポジットパターン
        
        
            
    サーチ…
コンポジットロガー
合成パターンは、オブジェクトのグループをオブジェクトの単一のインスタンスとして扱うことを可能にするデザインパターンです。これはGang of Fourの構造設計パターンの1つです。
以下の例は、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
合成ロガーをネストすることができます(合成ロガーのコンストラクターのパラメーターの1つは、別の合成ロガーになることがあります)、ツリーのような構造を作成できます。
Modified text is an extract of the original Stack Overflow Documentation
        ライセンスを受けた CC BY-SA 3.0
        所属していない Stack Overflow