Básicamente necesito ejecutar diferentes acciones dada una cierta condición. El código existente se escribe de esta manera.
Interfaz base
// DoSomething.java
interface DoSomething {
void letDoIt(String info);
}
Implementación de la primera clase obrera.
class DoItThisWay implements DoSomething {
...
}
Implementación de la segunda clase obrera.
class DoItThatWay implements DoSomething {
...
}
La clase principal
class Main {
public doingIt(String info) {
DoSomething worker;
if (info == 'this') {
worker = new DoItThisWay();
} else {
worker = new DoItThatWay();
}
worker.letDoIt(info)
}
Este código funciona bien y es fácil de entender.
Ahora, debido a un nuevo requisito, necesito pasar una nueva información que solo tiene sentido DoItThisWay.
Mi pregunta es: ¿es bueno el siguiente estilo de codificación para manejar este requisito?
Use una nueva variable de clase y método
// 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 lo hago de esta manera, necesito hacer el cambio correspondiente a la persona que llama:
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)
}
¿Es un buen estilo de codificación? ¿O puedo simplemente lanzarlo?
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)
}
DoItThisWayy DoItThatWayse realiza una vez en el constructor de Main. Maines una clase de larga vida y doingItse llama muchas veces una y otra vez.
setQualitymétodo se llamará varias veces durante la vida útil del DoItThisWayobjeto?
qualityal constructorDoItThisWay?