Fondamentalement, je dois exécuter différentes actions dans une certaine condition. Le code existant est écrit de cette façon
Interface de base
// DoSomething.java
interface DoSomething {
void letDoIt(String info);
}
Mise en place de la première classe ouvrière
class DoItThisWay implements DoSomething {
...
}
Mise en place de la deuxième classe ouvrière
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)
}
Ce code fonctionne bien et est facile à comprendre.
Maintenant, en raison d'une nouvelle exigence, je dois transmettre une nouvelle information qui n'a de sens que pour DoItThisWay
.
Ma question est la suivante: le style de codage suivant convient-il à cette exigence?
Utiliser une nouvelle variable et méthode de classe
// 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 {
...
}
} ;
}
Si je le fais de cette façon, je dois apporter la modification correspondante à l'appelant:
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)
}
Est-ce un bon style de codage? Ou puis-je simplement le lancer
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
et DoItThatWay
se fait une fois dans le constructeur de Main
. Main
est une classe à longue durée de vie et doingIt
est appelée plusieurs fois.
setQuality
méthode sera appelée plusieurs fois pendant la durée de vie de l' DoItThisWay
objet?
quality
au constructeur pourDoItThisWay
?