Di tanto in tanto scrivo codice come questo quando voglio sostituire piccole parti di un'implementazione esistente:
public interface IFoo
{
void Bar();
}
public class Foo : IFoo
{
public void Bar()
{
}
}
public class ProxyFoo : IFoo
{
private IFoo _Implementation;
public ProxyFoo(IFoo implementation)
{
this._Implementation = implementation;
}
#region IFoo Members
public void Bar()
{
this._Implementation.Bar();
}
#endregion
}
Questo è un esempio molto più piccolo rispetto ai casi reali in cui ho usato questo modello, ma se implementare un'interfaccia esistente o una classe astratta richiederebbe molto codice, la maggior parte dei quali è già scritta, ma ho bisogno di cambiare una piccola parte del comportamento, quindi userò questo modello.
Questo è un pattern o un pattern anti? Se sì, ha un nome e ci sono pro e contro ben noti a questo approccio?
C'è un modo migliore per ottenere lo stesso risultato? Riscrivere le interfacce e / o l'implementazione concreta normalmente non è un'opzione in quanto verrà fornita da una libreria di terze parti.