В основному мені потрібно виконувати різні дії за певної умови. Існуючий код пишеться таким чином
Базовий інтерфейс
// 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
?