Principios y arquitectura / Inyección de dependencias
Decorator
Notas originales de SunDiaL · Ver fuente en inglés
El problema: quieres ampliar la funcionalidad de una clase de forma flexible. La solución: crear una clase «Decorator» que implemente la misma interfaz que la clase original.
Así respetas el principio de responsabilidad única, porque quien llama no debería saber ni preocuparse de si está usando la instancia original o una decorada.
public interface IService
{
public void DoSomething()
}
public class Service : IService
{
private int x = 1;
public void DoSomething()
{
this.x++;
}
}
public class LoggedService : IService
{
private IService service;
private ILogger logger
public LoggedService(IService service, ILogger logger)
{
this.service = service;
this.logger = logger
}
public void DoSomething()
{
this.logger.Log("DoSomething() started");
this.service.DoSomething();
this.logger.Log("DoSomething() ended");
}
}