Nota che non posso utilizzare l'ereditarietà statica a causa delle limitazioni della lingua (Java).
Esiste una classe di costruzione generale. Ogni istanza di Building
ha proprietà che esistono indipendentemente dalle variabili di istanza (come larghezza, lunghezza, livello massimo, danno BASE). Esistono numerosi tipi di edifici, come risorse e difensive, e all'interno di questi tipi ci sono gli edifici reali che un utente costruisce (come un mulino o un cannone).
Il problema è l'ereditarietà statica. Non posso richiedere sottotipi di Building
per avere le proprietà statiche sopra menzionate.
Cosa ho provato:
1) Uso del pattern singleton per simulare l'ereditarietà statica (in modo efficace, i pattern di istanza di una classe che ha un'istanza hanno la stessa funzionalità di static). Tuttavia, ho bisogno di capacità di generare istanze di edifici sul posto (come quando un utente costruisce un segheria, che avrebbe un livello corrente che fa parte dell'istanza, non della classe). Pertanto, questo era inefficace.
2) Usare enum per rappresentare tutti gli edifici (quindi questi enumerri sarebbero LUMBERMILL
, ARCHER_TOWER
, ecc.). Tuttavia, ancora una volta, ho bisogno della possibilità di creare più istanze di questi tipi di edifici. Le enumerazioni sono funzionalmente equivalenti ai campi statici pubblici, pertanto non è possibile creare più istanze.
Vale la pena ricordare che sto usando Java, quindi se alcune soluzioni richiedono la creazione di istanze di tipi generici disponibili in fase di runtime, non sono in grado di farlo.
Come posso simulare questa ricerca usando OOP?