Mentre lavoravo a un progetto, ho trovato una soluzione di design. Ho difficoltà a collegarlo a qualsiasi schema generale di progettazione o ad analizzare questa situazione nei dettagli. Questo mi sta anche impedendo di trovare un design migliore per questo.
Questa è una semplice analogia della mia soluzione -
Sia Kangaroo
che Tiger
possono walk
ma solo Kangaroo
può jump
e solo Tiger
può run
.
Animal<TLeg> where TLegs: ILegs
{
TLegs Legs;
void Walk(){ Legs.Walk(); }
}
Kangaroo: Animal<IJumpingLegs>
{
void Jump() { Legs.Jump(); }
}
Tiger: Animal<IRunningLegs>
{
void Run() { Legs.Run(); }
}
ILegs
{
void Walk();
}
IRunningLegs : ILegs
{
void Run();
}
IJumpingLegs : Ilegs
{
void Jump();
}
[Modifica]
Descrizione del problema:
Qui, Kangaroo e Tiger condividono funzioni comuni e una proprietà Legs. Pertanto, ho una classe base per le funzioni comuni. La classe base deve avere accesso a questa proprietà Legs
.
Anche le funzioni in sottoclassi fanno affidamento su Leg e in base al tipo di Leg, la sottoclasse dovrà chiamare diverse funzioni di questa proprietà.
In sostanza, due animali concreti necessitano di alcuni metodi comuni e i loro metodi non comuni (Jump and Run) richiedono un TYPE diverso di una proprietà comune.
Per questo problema, ho trovato la soluzione sopra descritta. Sperando di essere in grado di descrivere il mio problema, vorrei sapere se potrebbe esserci una soluzione alternativa.
Questo problema / soluzione suona familiare? C'è qualcosa che può essere migliorato?