da tux2 » gio ott 19, 2006 10:55 pm
Se le classi di cui parli hanno la stessa interfaccia della classe madre, allora non ci sono problemi, Devi creare due method Factory, del tipo :
- Codice: Seleziona tutto
public class Bonus {
public void methodOne() {
// implementazione
}
public void methodTwo() {
// implementazione
}
// factory method per BonusVista
public static Bonus createBonusVista() {
return new Bonus() {
public void methodOne() {
// overriding del metodo Bonus.methodOne()
}
};
}
// factory method per BonusVelocita
public static Bonus createBonusVelocita() {
return new Bonus() {
public void methodTwo() {
// overriding del metodo Bonus.methodTwo()
}
};
}
}
o anche :
- Codice: Seleziona tutto
public class Bonus {
public void methodOne() {
// implementazione
}
public void methodTwo() {
// implementazione
}
// factory method per BonusVista
public static Bonus createBonusVista() {
return new BonusVista();
}
// factory method per BonusVelocita
public static Bonus createBonusVelocita() {
return new BonusVelocita();
}
}
class BonusVelocita extends Bonus {
public void methodTwo() {
// overriding del metodo Bonus.methodTwo()
}
}
class BonusVista extends Bonus {
public void methodOne() {
// overriding del metodo Bonus.methodOne()
}
}
In questo modo invece di chamare il costruttore new BonusVista() devi chiamare il factory method Bonus.createBonusVista().
Nel primo esempio Bonus è l'unica classe che ha visivilità sulle sue sottoclassi, mentre nel secondo, puoi dare al massimo visibilità di package alle classi in quanto altrimenti dovresti dichiararle in sorgenti separati con nome uguali alle classi (vincolo base in java per le classi pubbliche).
Se invece le classi che devi scrivere non hanno interfaccia esattamente uguale a Bonus (ad esempio hanno dei bonus in più) allora devi per forza renderle pubbliche, o almeno creare delle interfacce pubbliche per descrivere tali classi.
Ciao
Le persone si dividono in 10 categorie,
quelle che conoscono il binario e quelle che non lo conoscono.