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)
}
DoItThisWaydan DoItThatWaydilakukan sekali dalam konstruktor Main. Mainadalah kelas hidup yang panjang dan doingItdisebut berkali-kali.
setQualitymetode ini akan dipanggil beberapa kali selama masa pakai DoItThisWayobjek?
qualityke konstruktorDoItThisWay?