Sto scrivendo una libreria open source che gestisce le griglie esagonali. Riguarda principalmente la HexagonalGrid
e la Hexagon
class. Esiste una classe HexagonalGridBuilder
che crea la griglia che contiene oggetti Hexagon
. Quello che sto cercando di ottenere è di consentire all'utente di aggiungere dati arbitrari a ogni Hexagon
. L'interfaccia ha questo aspetto:
public interface Hexagon extends Serializable {
// ... other methods not important in this context
<T> void setSatelliteData(T data);
<T> T getSatelliteData();
}
Fin qui tutto bene. Sto scrivendo un'altra classe, tuttavia chiamata HexagonalGridCalculator
, che aggiunge alla libreria alcuni pezzi fantasiosi di calcolo come calcolare il percorso più breve tra due Hexagon
s o calcolare la linea di vista intorno a Hexagon
. Il mio problema è che per quelli ho bisogno che l'utente fornisca alcuni dati per gli oggetti Hexagon
come il costo di passare attraverso Hexagon
, o un boolean
indicatore che indica se l'oggetto è < strong> trasparente / passabile o non.
La mia domanda è: come dovrei implementarla?
La mia prima idea era di scrivere un'interfaccia come questa:
public interface HexagonData {
void setTransparent(boolean isTransparent);
void setPassable(boolean isPassable);
void setPassageCost(int cost);
}
e far sì che l'utente lo realizzi, ma poi mi viene in mente che se aggiungo altre funzionalità in un secondo momento, tutto il codice si interromperà per coloro che stanno utilizzando la vecchia interfaccia.
Quindi la mia prossima idea è aggiungere annotazioni come
@PassageCost
, @IsTransparent
e @IsPassable
che può essere aggiunto ai campi e quando sto facendo il calcolo posso cercare le annotazioni nella satelliteData
fornita dall'utente. Questo sembra abbastanza flessibile se prendo in considerazione la possibilità di modifiche successive ma utilizza la riflessione. Non ho parametri di riferimento per l'utilizzo delle annotazioni, quindi sono un po 'al buio qui.
Penso che nel 90-95% dei casi l'efficienza non sia importante poiché la maggior parte degli utenti non usa una griglia in cui ciò è significativo, ma posso immaginare che qualcuno stia cercando di creare una griglia con una dimensione di 5.000.000.000 X 5.000.000.000
.
Quindi su quale percorso dovrei iniziare a camminare? O ci sono alternative migliori?
Nota: queste idee non sono ancora implementate, quindi non ho prestato troppa attenzione ai nomi di qualità.