Buscar..


Maderero compuesto

El patrón compuesto es un patrón de diseño que permite tratar un grupo de objetos como una instancia única de un objeto. Es uno de los patrones de diseño estructural de Gang of Four.

El siguiente ejemplo muestra cómo se puede utilizar Composite para iniciar sesión en múltiples lugares mediante una invocación única de registro. Este enfoque se adhiere a los principios de SOLID porque le permite agregar un nuevo mecanismo de registro sin violar el principio de responsabilidad única (cada registrador tiene solo una responsabilidad) o el principio de apertura / cierre (puede agregar un nuevo registrador que se registrará en un nuevo lugar agregando una nueva implementación y no modificando los existentes).

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

Vale la pena mencionar que los registradores compuestos se pueden anidar (uno de los parámetros del constructor de registradores compuestos puede ser otro registrador compuesto) creando una estructura similar a un árbol.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow