Ciao amici, ho un quesito:
sto sviluppando una classe astratta padre A che implemente il pattern Template, quindi all'interno di un metodo esegui() riporta la lista di esecuzione di alcuni metodi astratti da implementare nelle classi figlie:
Il concetto è che un oggetti di tipo X viene inizializzato (init), viene avviato (call) e il risultato, l'oggetto di tipo Y viene elaborato (elaborate).codice:public final Object esegui() { init(x); Y y = call(x); return elaborate(y); }
Ora il problema: X e Y sono interfacce, ogni classe derivata da A (la classe che contiene il metodo esegui()) utilizzerà le sue personali classi che implementano X e Y: ciò significa che all'interno della classe B, volendo implementare il metodo init():
posta X1 una classe derivata da X, io dovrò ogni volta castare a X1 i riferimenti di X; idem per quanto riguarda le classi derivate da Y!codice:@Override protected void init(X x) { X1 x1 = (X1) x; x1.set(... x1.get() }
E questo limita la flessibilità del codice.
Sapete come posso risolvere il problema? Non esiste un pattern che mi permetta di passare da classe padre a classe figlia senza trasformare i tipi delle variabili che passo?
Fatemi sapere se non sono stato chiaro.
Grazie!![]()

Rispondi quotando