Decorator — RexDac Academy

RexDac AcademyNote tehnice · Ajută să ai câteva noțiuni de bază
0%Note publicate citite · pe acest dispozitiv

Principii și arhitectură / Injectarea dependențelor

Decorator

Note originale de SunDiaL · Vezi sursa în engleză

Problema: Vrei să extinzi funcționalitatea unei clase într-un mod flexibil. Soluția: Creează o clasă „Decorator” care implementează aceeași interfață ca clasa originală.

În acest fel respecți principiul responsabilității unice, deoarece apelantul nu ar trebui să știe sau să fie preocupat dacă acea clasă pe care o apelează este instanța originală sau una decorată.

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