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