Grundsätzlich muss ich unter bestimmten Bedingungen verschiedene Aktionen ausführen. Der vorhandene Code ist so geschrieben
Basisschnittstelle
// DoSomething.java
interface DoSomething {
void letDoIt(String info);
}
Implementierung der ersten Arbeiterklasse
class DoItThisWay implements DoSomething {
...
}
Implementierung der zweiten Arbeiterklasse
class DoItThatWay implements DoSomething {
...
}
Die Hauptklasse
class Main {
public doingIt(String info) {
DoSomething worker;
if (info == 'this') {
worker = new DoItThisWay();
} else {
worker = new DoItThatWay();
}
worker.letDoIt(info)
}
Dieser Code funktioniert einwandfrei und ist leicht zu verstehen.
Jetzt muss ich aufgrund einer neuen Anforderung eine neue Information weitergeben, die nur für sinnvoll ist DoItThisWay
.
Meine Frage ist: Ist der folgende Codierungsstil gut, um mit dieser Anforderung umzugehen.
Verwenden Sie eine neue Klassenvariable und Methode
// 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 {
...
}
} ;
}
Wenn ich das so mache, muss ich die entsprechende Änderung am Anrufer vornehmen:
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)
}
Ist es ein guter Codierungsstil? Oder kann ich es einfach besetzen?
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
und DoItThatWay
einmalig im Konstruktor von erfolgt Main
. Main
ist eine langlebige Klasse und doingIt
wird immer wieder aufgerufen.
setQuality
Methode während der Lebensdauer des DoItThisWay
Objekts mehrmals aufgerufen wird?
quality
in den Konstruktor übergehenDoItThisWay
?