В основном мне нужно выполнять разные действия при определенных условиях. Существующий код написан таким образом
Базовый интерфейс
// DoSomething.java
interface DoSomething {
void letDoIt(String info);
}
Реализация первого рабочего класса
class DoItThisWay implements DoSomething {
...
}
Реализация второго рабочего класса
class DoItThatWay implements DoSomething {
...
}
Основной класс
class Main {
public doingIt(String info) {
DoSomething worker;
if (info == 'this') {
worker = new DoItThisWay();
} else {
worker = new DoItThatWay();
}
worker.letDoIt(info)
}
Этот код работает нормально и его легко понять.
Теперь, в связи с новым требованием, мне нужно передать новую информацию, которая имеет смысл DoItThisWay
.
Мой вопрос: хорош ли следующий стиль кодирования для удовлетворения этого требования.
Используйте новую переменную класса и метод
// 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 {
...
}
} ;
}
Если я делаю это таким образом, мне нужно внести соответствующие изменения в вызывающей стороне:
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)
}
Это хороший стиль кодирования? Или я могу просто бросить это
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
и DoItThatWay
выполняется один раз в конструкторе Main
. Main
это долгоживущий класс и doingIt
вызывается много раз снова и снова.
setQuality
метод будет вызываться несколько раз за время существования DoItThisWay
объекта?
quality
в конструктор дляDoItThisWay
?