मूल रूप से मुझे एक निश्चित स्थिति को देखते हुए विभिन्न कार्यों को निष्पादित करने की आवश्यकता है। मौजूदा कोड इस तरह से लिखा गया है
आधार इंटरफ़ेस
// 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
?