Fondamentalmente ho bisogno di eseguire diverse azioni dato una certa condizione. Il codice esistente è scritto in questo modo
Interfaccia di base
// DoSomething.java
interface DoSomething {
void letDoIt(String info);
}
Implementazione della prima classe operaia
class DoItThisWay implements DoSomething {
...
}
Implementazione della seconda classe operaia
class DoItThatWay implements DoSomething {
...
}
La classe principale
class Main {
public doingIt(String info) {
DoSomething worker;
if (info == 'this') {
worker = new DoItThisWay();
} else {
worker = new DoItThatWay();
}
worker.letDoIt(info)
}
Questo codice funziona bene ed è facile da capire.
Ora, a causa di un nuovo requisito, ho bisogno di passare una nuova informazione che ha senso solo DoItThisWay
.
La mia domanda è: il seguente stile di codifica è buono per gestire questo requisito.
Usa nuova variabile di classe e metodo
// Use new class variable and method
class DoItThisWay implements DoSomething {
private int quality;
DoSomething() {
quality = 0;
}
public void setQuality(int quality) {
this.quality = quality;
};
public void letDoIt(String info) {
if (quality > 50) { // make use of the new information
...
} else {
...
}
} ;
}
Se lo faccio in questo modo, devo apportare la modifica corrispondente al chiamante:
class Main {
public doingIt(String info) {
DoSomething worker;
if (info == 'this') {
int quality = obtainQualityInfo();
DoItThisWay tmp = new DoItThisWay();
tmp.setQuality(quality)
worker = tmp;
} else {
worker = new DoItThatWay();
}
worker.letDoIt(info)
}
È un buon stile di programmazione? O posso semplicemente lanciarlo
class Main {
public doingIt(String info) {
DoSomething worker;
if (info == 'this') {
int quality = obtainQualityInfo();
worker = new DoItThisWay();
((DoItThisWay) worker).setQuality(quality)
} else {
worker = new DoItThatWay();
}
worker.letDoIt(info)
}
DoItThisWay
e DoItThatWay
viene eseguita una volta nel costruttore di Main
. Main
è una classe di lunga vita e doingIt
viene chiamata più volte.
setQuality
metodo verrà chiamato più volte durante la vita DoItThisWay
dell'oggetto?
quality
nel costruttore perDoItThisWay
?