banryu79
03-09-2009, 10:19
Buondì,
ho una enum java scritta così:
public enum Posizione
{
CENTRO, N, NE, E, SE, S, SW, W, NW;
public Point asPoint()
{
int stepW = SCREEN.width/3;
int stepH = SCREEN.height/3;
Point point = new Point();
switch (this) {
case CENTRO: point.setLocation(1.5*stepW, 1.5*stepH);
break;
case N: point.setLocation(1.5*stepW, 0.5*stepH);
break;
case NE: point.setLocation(2.5*stepW, 0.5*stepH);
break;
case E: point.setLocation(2.5*stepW, 1.5*stepH);
break;
case SE: point.setLocation(2.5*stepW, 2.5*stepH);
break;
case S: point.setLocation(1.5*stepW, 2.5*stepH);
break;
case SW: point.setLocation(0.5*stepW, 2.5*stepH);
break;
case W: point.setLocation(0.5*stepW, 1.5*stepH);
break;
case NW: point.setLocation(0.5*stepW, 0.5*stepH);
break;
}
return point;
}
}
Viene usata altrove, da oggetti grafici capaci di disegnarsi sullo schermo, tipo così:
// altrove...
private void posizionaOggetti()
{
oggettoIniziale.centerOn(pos1.asPoint());
Point p = pos2.asPoint();
for (Drawable d : oggettiFinali) {
d.centerOn(p);
}
}
La cosa in se funziona, ma non mi dispiacerebbe eliminare il costrutto switch-case, se possibile.
Di primo acchitto mi verrebbe da usare il polimorfismo: creo una interfaccia Posizione che come contratto dichiara un metodo "getPoint" che non prende nulla e restituisce un Point.
Ma così dovrei implementare 9 sottoclassi: una per ogni "posizione" (CENTRO, N, NE, E, SE, S , SW, W, NW).
Esiste un'alternativa?
Non è che non ci dormo la notte, lo switch può anche restare, ma mi domandavo se esistesse una soluzione della serie "semplice & elegante" a la OOP
ho una enum java scritta così:
public enum Posizione
{
CENTRO, N, NE, E, SE, S, SW, W, NW;
public Point asPoint()
{
int stepW = SCREEN.width/3;
int stepH = SCREEN.height/3;
Point point = new Point();
switch (this) {
case CENTRO: point.setLocation(1.5*stepW, 1.5*stepH);
break;
case N: point.setLocation(1.5*stepW, 0.5*stepH);
break;
case NE: point.setLocation(2.5*stepW, 0.5*stepH);
break;
case E: point.setLocation(2.5*stepW, 1.5*stepH);
break;
case SE: point.setLocation(2.5*stepW, 2.5*stepH);
break;
case S: point.setLocation(1.5*stepW, 2.5*stepH);
break;
case SW: point.setLocation(0.5*stepW, 2.5*stepH);
break;
case W: point.setLocation(0.5*stepW, 1.5*stepH);
break;
case NW: point.setLocation(0.5*stepW, 0.5*stepH);
break;
}
return point;
}
}
Viene usata altrove, da oggetti grafici capaci di disegnarsi sullo schermo, tipo così:
// altrove...
private void posizionaOggetti()
{
oggettoIniziale.centerOn(pos1.asPoint());
Point p = pos2.asPoint();
for (Drawable d : oggettiFinali) {
d.centerOn(p);
}
}
La cosa in se funziona, ma non mi dispiacerebbe eliminare il costrutto switch-case, se possibile.
Di primo acchitto mi verrebbe da usare il polimorfismo: creo una interfaccia Posizione che come contratto dichiara un metodo "getPoint" che non prende nulla e restituisce un Point.
Ma così dovrei implementare 9 sottoclassi: una per ogni "posizione" (CENTRO, N, NE, E, SE, S , SW, W, NW).
Esiste un'alternativa?
Non è che non ci dormo la notte, lo switch può anche restare, ma mi domandavo se esistesse una soluzione della serie "semplice & elegante" a la OOP