Pada dasarnya saya perlu melakukan tindakan yang berbeda dengan syarat tertentu. Kode yang ada ditulis dengan cara ini
Antarmuka dasar
// DoSomething.java
interface DoSomething {
void letDoIt(String info);
}
Implementasi kelas pekerja pertama
class DoItThisWay implements DoSomething {
...
}
Implementasi kelas pekerja kedua
class DoItThatWay implements DoSomething {
...
}
Kelas utama
class Main {
public doingIt(String info) {
DoSomething worker;
if (info == 'this') {
worker = new DoItThisWay();
} else {
worker = new DoItThatWay();
}
worker.letDoIt(info)
}
Kode ini berfungsi dengan baik dan mudah dimengerti.
Sekarang, karena persyaratan baru, saya perlu memberikan informasi baru yang masuk akal DoItThisWay
.
Pertanyaan saya adalah: apakah gaya pengkodean berikut baik untuk menangani persyaratan ini.
Gunakan variabel dan metode kelas baru
// 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 {
...
}
} ;
}
Jika saya melakukannya dengan cara ini, saya perlu membuat perubahan yang sesuai dengan penelepon:
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)
}
Apakah ini gaya pengkodean yang baik? Atau bisakah saya melemparkannya saja
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
dan DoItThatWay
dilakukan sekali dalam konstruktor Main
. Main
adalah kelas hidup yang panjang dan doingIt
disebut berkali-kali.
setQuality
metode ini akan dipanggil beberapa kali selama masa pakai DoItThisWay
objek?
quality
ke konstruktorDoItThisWay
?