Articoli di programmazione

Design patterns in pillole: Servant (alcuni lo chiamano Helper)

Servant mette a disposizione dei metodi ad un set di classi, che possono quindi essere condivisi e non risiedere nelle classi stesse

440px-DesignPatternServantFigure2.png
Spesso in un sistema, un gruppo di classi implementa le stesse interfacce oppure eredita dalla stessa classe. Altre volte semplicemente, anche se non hanno nulla in comune, alcune classi appartengono allo stesso gruppo logico perché effettuano operazioni risalenti allo stesso ambito.
Un esempio potrebbe essere quello di un gruppo di classi grafiche come Circle, Rectangle, Line, Square: tutte operano con punti e coordinate. Questo aspetto le accomuna, per cui potrebbe essere vantaggioso implementare una classe Servant, o come le chiamano altri, classe Helper, per poter eseguire operazioni comuni a tutte.
In questo esempio MovableServant può essere chiamato sia per Rectangle che Circle:

interface IMovable
{
void SetPosition(Position p);
}

class Rectangle : IMovable
{
public void SetPosition(Position p) {}
}

class Circle : IMovable
{
public void SetPosition(Position p) { }
}

class MovableServant
{
public void MoveToBottomOfScreen(IMovable m)
{
// fai alcuni calcoli per ricavare Bottom of Screen
// dopo che hai ricavato la nuova posizione, muovi l'oggetto:
m.SetPosition(CaculatePosition(m, KnownPositions.BottomScreen));
}

Position CaculatePosition(IMovable m, object bottomScreen)
{
throw new NotImplementedException();
}
}


#programmazione #designPatterns