Decorator — RexDac Academy

RexDac AcademyNotas técnicas · Ayuda tener algunos conocimientos previos
0%Notas publicadas leídas · en este dispositivo

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");
	}
}