Potrei sembrare un idiota totale con una simile domanda, ma non è venuto fuori nulla quando l'ho cercato, quindi immagino perché no. Ecco il mio problema:
Sto facendo il lavoro di UML per un gioco in C ++, che mostrerà animali e razze.
Innanzitutto, ho una classe astratta Entity
e tre classi ereditate Human
, Dog
e Cat
.
Ora diciamo che voglio aggiungere un nuovo tipo di specie, i Droidi per esempio, in un modo in cui ci sono tre nuove classi: DroidHuman
, DroidDog
e DroidCat
. Ecco tre nuove classi da creare per una nuova gara, e se voglio aggiungere la gente del Vuoto, ci saranno altre tre classi da creare.
Invece di fare questo, preferisco avere una sorta di modello di progettazione che mi permetta di mantenere le tre classi originali e solo queste: Human
, Dog
e Cat
.
Un cane normale e un cane droide sarebbero entrambi istanze della classe Dog
che eredita da Entity
. Ci sarebbe anche una super classe Normal
e una super classe Droid
. La differenza tra un cane normale e un cane droide sarebbe che ereditano da EITH Normal
O Droid
.
So che sto chiedendo l'impossibile, ma ho immaginato che ci sarebbe stato un modo simile per farlo che potrei non essere a conoscenza.
Ho inizialmente pensato al modello di fabbrica, ma non posso pensare in alcun modo che possa risolvere il mio problema.
L'unico altro modo in cui ho trovato per evitare questo immenso casino è aggiungere un attributo come boolean isDroid = true;
per ogni nuova razza. Ma non sono contento di modificare il codice esistente per adattarlo alle nuove cose.
Non posso essere l'unico ad aver affrontato questo problema, vero?
Qualsiasi aiuto è apprezzato. Molte grazie.