यह आइटम 40 के एक हिस्से को समझने का प्रयास है: प्रभावी विधि द्वितीय संस्करण से डिजाइन विधि हस्ताक्षर सावधानी से।विधि आमंत्रण के लिए बिल्डर पैटर्न को अनुकूलित करना
विधि हस्ताक्षर पठनीयता में सुधार करने के लिए सुझाए गए एक चीज में चार या कम पैरामीटर का लक्ष्य है। यह सुझाव दिया है विभिन्न तकनीकों का उपयोग करते हुए, जिनमें से एक इस प्रकार है द्वारा कि लंबे समय तक पैरामीटर सूचियों से प्रबंधित किया जा:
एक तिहाई तकनीक है कि जोड़ती है पहले दो के पहलुओं बिल्डर पैटर्न अनुकूल करने के लिए है से (आइटम 2) विधि आमंत्रण के लिए ऑब्जेक्ट निर्माण। यदि आपके पास कई पैरामीटर के साथ कोई तरीका है, खासकर यदि उनमें से कुछ वैकल्पिक हैं, तो यह ऑब्जेक्ट को परिभाषित करने के लिए फायदेमंद हो सकता है जो सभी मानकों का प्रतिनिधित्व करता है, और क्लाइंट को इस ऑब्जेक्ट पर एकाधिक "सेटर" कॉल करने की अनुमति देने के लिए , जिनमें से प्रत्येक एक पैरामीटर या एक छोटा, संबंधित समूह सेट करता है। एक बार वांछित पैरामीटर सेट हो जाने के बाद, क्लाइंट ऑब्जेक्ट की "निष्पादन" विधि को आमंत्रित करता है, जो पैरामीटर पर अंतिम वैधता जांच करता है और वास्तविक गणना करता है।
मैं बिल्डर पैटर्न से परिचित हूं क्योंकि इसका उपयोग ऑब्जेक्ट निर्माण के लिए किया जाता है, लेकिन मुझे यकीन नहीं है कि मैंने सही तरीके से समझ लिया है कि विधिवत आमंत्रण के लिए इसे कैसे अनुकूलित किया जाए।
public class Space {
public static class Builder {
// Required parameters
private final int x;
private final int y;
private final int z;
// optional params
private long time = 0;
public Builder(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
public Builder time(long val) {
time = val;
return this;
}
public void move() {
if (x == 0 || y == 0 || z == 0) {
throw new IllegalArgumentException("Cannot move to the centre of the universe");
}
// Do the actual work here
}
}
// public void move(int x, int y, int z, long time) {
// // Do the work here
// }
public static void main(String[] args) {
new Builder(1, 1, -1).time(1234).move();
}
}
यहोशू बलोच की सलाह मेरी व्याख्या सही है (मैं move
विधि के लिए विधि मंगलाचरण में सुधार करने का प्रयास किया है):
यहाँ मैं अब तक किया है?
आह मुझे ऐसा करने का मतलब था लेकिन यह मेरे दिमाग में फिसल गया। मैं जावा के लिए jsfiddle की तरह कुछ खोजना चाहता था। –
हो गया। धन्यवाद assylias! –
मुझे लगता है कि विचार कुछ लिखना है: 'बिल्डर बिल्डर = नया मूवबिल्डर()। X (123) .y (456) .टाइम (78 9); yourObject.execute (बिल्डर); ' – assylias