Temelde belirli bir koşul verildiğinde farklı eylemler yürütmem gerekiyor. Mevcut kod bu şekilde yazılır
Temel arayüz
// DoSomething.java
interface DoSomething {
void letDoIt(String info);
}
Birinci işçi sınıfının uygulanması
class DoItThisWay implements DoSomething {
...
}
İkinci işçi sınıfının uygulanması
class DoItThatWay implements DoSomething {
...
}
Ana sınıf
class Main {
public doingIt(String info) {
DoSomething worker;
if (info == 'this') {
worker = new DoItThisWay();
} else {
worker = new DoItThatWay();
}
worker.letDoIt(info)
}
Bu kod iyi çalışıyor ve anlaşılması kolaydır.
Şimdi, yeni bir gereksinim nedeniyle, sadece mantıklı olan yeni bir bilgi geçmem gerekiyor DoItThisWay
.
Benim sorum: Aşağıdaki kodlama tarzı bu gereksinimi karşılamak için iyi yapar.
Yeni sınıf değişkeni ve yöntemini kullan
// 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 {
...
}
} ;
}
Bu şekilde yaparsam, arayan için ilgili değişikliği yapmak gerekir:
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)
}
İyi bir kodlama tarzı mı? Yoksa sadece atabilir miyim
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
ve bir DoItThatWay
kez yapılır Main
. Main
uzun yaşayan bir sınıftır ve doingIt
defalarca defalarca çağrılır.
setQuality
Yöntemin DoItThisWay
nesnenin ömrü boyunca birden çok kez çağrılacağını mı söylemek istiyorsun ?
quality
için yapıcı içineDoItThisWay
?