मैं प्रभावी जावाद्वारा जोशुआ ब्लोच पढ़ रहा है और अब तक यह वास्तव में अपनी प्रतिष्ठा तक रहता है। सबसे पहले आइटम स्थिर कारखाने के तरीकोंकन्स्ट्रक्टर पर एक ठोस मामला बनाता है। इतना अच्छा है कि मैंने अच्छे पुराने रचनाकारों की वैधता पर सवाल उठाना शुरू कर दिया :)।क्या हमें कभी भी स्थिर कारखाने के तरीकों पर रचनाकारों को प्राथमिकता देने की आवश्यकता है? अगर ऐसा हैं तोह कब?
फायदे/किताब से नुकसान सारांश नीचे दिया:
लाभ:
- वे नाम है!
- हम कुल उदाहरण नियंत्रण (Singletons, प्रदर्शन, आदि)
- वे एक उप-प्रकार/इंटरफ़ेस लौट सकते हैं
- संकलक प्रकार निष्कर्ष
नुकसान प्रदान कर सकते हैं:
- निजी वर्गों को
- उप-वर्गीकृत नहीं किया जा सकता है वे प्रलेखक के रूप में प्रलेखन में खड़े नहीं हैं रों करना
पहले नुकसान वास्तव में किया जा सकता है एक अच्छी बात (पुस्तक में उल्लेख किया गया है)। दूसरा, मुझे लगता है कि यह मामूली नुकसान है और आने वाले जावा रिलीज (जावाडोक इत्यादि के लिए एनोटेशन) के साथ आसानी से हल किया जा सकता है
ऐसा लगता है कि अंत में कारखाने के तरीकों में रचनाकारों के लगभग सभी फायदे हैं, कई कई और फायदे, और कोई वास्तविक नुकसान नहीं!
तो, मेरे सवाल का तीन भागों में मूल रूप से है:
- यह अच्छा अभ्यास हमेशा कंस्ट्रक्टर्स से अधिक डिफ़ॉल्ट रूप से स्थिर कारखाने तरीकों का उपयोग करने के लिए है?
- क्या यह कभी भी रचनाकारों का उपयोग करने के लिए उचित है?
- ऑब्जेक्ट उन्मुख भाषाएं कारखानों के लिए भाषा स्तर का समर्थन क्यों नहीं देती हैं?
नोट: दो इसी तरह के सवाल कर रहे हैं: When to use a Constructor and when to use getInstance() method (static factory methods)? और Creation of Objects: Constructors or Static Factory Methods। हालांकि उत्तर या तो उपर्युक्त सूची प्रदान करते हैं या स्थैतिक फैक्ट्री विधियों के पीछे तर्क को दोहराते हैं जिन्हें मैं पहले से ही जानता हूं।
इसके अलावा, स्पष्ट रूप से कारखानों के पास रचनाकारों पर थ्रेड-सुरक्षा के फायदे भी हैं [इस] (http://madpropellerhead.com/random/20100328-java-final-fields-are-not-as-final-as- आप सोच सकते हैं)। – MadChuckle
मैंने संदर्भित आलेख पढ़ा, लेकिन लेखक के रूप में विपरीत निष्कर्ष पर आया ... :-) मुझे लगता है कि क्या इंगित किया गया है, लेकिन असहमत है। शायद इसे विशिष्ट उपयोग मामलों के साथ करना होगा जिसे हम प्रत्येक कोडिंग करते समय देखते हैं। –
@BrianKnoblauch, मैं समवर्तीता पर विशेषज्ञ नहीं हूं इसलिए मैं इसके लिए अपना शब्द ले जाऊंगा क्योंकि उदाहरण कुछ हद तक प्रतीत होते हैं :) – MadChuckle