โดยทั่วไปฉันต้องดำเนินการกระทำที่แตกต่างกันตามเงื่อนไขที่แน่นอน รหัสที่มีอยู่ถูกเขียนด้วยวิธีนี้
อินเตอร์เฟสพื้นฐาน
// 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
?