Ho un abstract class A
che dichiara un metodo astratto doStuff
. Attualmente ci sono molte classi che ereditano da A
e implementano doStuff
.
Le istanze della classe 'sono inizializzate in fase di esecuzione tramite AFactory
in base all'input dell'utente.
Originariamente tutte le classi avevano lo stesso parametro singolo (l'input dell'utente). Ma ora ho un parametro aggiuntivo che richiede solo una nuova classe che eredita A
.
Quindi analizzandoli, ho pensato alla seguente logica:
-
La classe interprete che genera istanze basate sull'input dell'utente (utilizzando
AFactory
ovviamente) non era a conoscenza di questo parametro extra.- Cercare di spingerlo nella classe degli interpreti di classe sarebbe davvero imbarazzante, perché poi dovrei sapere quando passare alla fabbrica che sconfigge l'intero scopo di avere una fabbrica in primo luogo.
- L'invio ciecamente alla Factory sperando che possa fare qualcosa con esso sembra abbastanza brutto.
-
La mia soluzione corrente: nel frattempo ho deciso di ridefinire
A.doStuff(Param param)
inA.doStuff(AParams params)
.AParams
può contenere tutti i parametri necessari edoStuff
può ignorare se non sono interessati a loro. Anche questo mi sembra un po 'imbarazzante e mi rimuove l'invio di strutture in WIN32API che possono contenere molti parametri inutili e non mi piacciono molto.
C'è un modo più elegante per affrontare questo problema? O qualche schema di progettazione che ho trascurato e risolvo questo?
Note :
- Utilizziamo Java 1.7
- I nomi delle classi sono sciocchi per enfatizzare il problema di progettazione teorico che hanno nomi indicativi e significativi nella realtà:)
- Ho cercato molto ma ho capito che è piuttosto difficile cercare sul web specifiche questioni teoriche astratte (a differenza di perché
X
lanciaException
in questo codice) ho deciso di chiedere comunque quindi mi dispiace se questo è un duplicato.
Modifica 1 :
-
Precisazione: ho bisogno di passare un argomento specifico per sottoclasse al metodo
doStuff
.
EDIT 2 :
-
Non ho compreso appieno l'intenzione di Kilian Foth, quindi ho scritto qualche pseudo-codice Java per aiutarmi a spiegare meglio il problema / capire la tua soluzione. Quindi:
Questo è uno scheletro del mio problema.
Questo è uno scheletro della mia soluzione.
Questo è ciò che penso potrebbe essere la soluzione di Kilian Foth, ma non ne sono sicuro.