2017-08-09 40 views
6

कोर जावा 8 की दिनांक और समय लाइब्रेरी में, यानी java.time पैकेज में उन वर्गों को लागू करता है, मुझे एक विशेष आम विशेषता मिली: प्रत्येक में कोई सार्वजनिक निर्माता नहीं है इस पैकेज की कक्षा, और इस प्रकार सभी कक्षाओं को केवल विधियों जैसे of, now आदि के माध्यम से तुरंत चालू किया जा सकता है। इस अर्थ में, java.time के अंदर कक्षा फैक्टरी डिजाइन पैटर्न जैसा दिखता है। हालांकि, ये कक्षाएं फैक्टरी डिजाइन पैटर्न से भिन्न होती हैं, जिसमें फैक्टरी डिजाइन पैटर्न का सार एक सामान्य विधि (आमतौर पर static) के साथ विभिन्न प्रकार की वस्तुओं को तुरंत चालू करने के लिए कोड को खोला जाता है, और इस प्रकार लौटाया गया प्रकार वस्तु उदाहरण रनटाइम तक निर्धारित किया जाता है।क्या java.time.LocalDate और java.time.ZonedDateTime फ़ैक्टरी पैटर्न

हालांकि, esp। कक्षा java.time.LocalDate और java.time.ZonedDateTime में, कीवर्ड फैक्टरी का उल्लेख किया गया था।

तो मैं जानना चाहता था कि java.time.LocalDate और java.time.ZonedDateTimeकारखाने डिजाइन पैटर्न सब पर लागू करना चाहते हैं: एक से कीवर्ड कारखाने मिल सकती है? यदि नहीं, तो वे किस डिजाइन पैटर्न पर लागू होते हैं?

उत्तर

2

मुझे लगता है कि वे नियम लागू करना

पर विचार करें कंस्ट्रक्टर्स के बजाय आंकड़े कारखाने तरीकों चाहता था

Effective Java by Joshua Bloch पुस्तक से।

उस नियम का लक्ष्य यह है कि स्थैतिक विधियां रचनाकारों के रूप में अधिक वर्णनात्मक हो सकती हैं, क्योंकि किसी विधि का नाम होता है।

उदाहरण के लिए:

ZonedDateTime.now(); 

से

new ZonedDateTime(); 

है और वर्णनात्मक है, है है नहीं?

तुम भी पढ़ने के लिए चाहते हो सकता है: Joshua Bloch #Item 1: Consider static factory methods instead of constructors

+0

बहुत बहुत धन्यवाद :) यही वह है जिसे मैं जानना चाहता हूं । तो यह * स्थैतिक कारखाना विधि * है। पुस्तक के रूप में - प्रभावी जावा - आपने बताया कि एक स्थिर कारखाना विधि डिजाइन पैटर्न से फैक्टरी विधि पैटर्न के समान नहीं है [Gamma95, p। 107]। इस मद में वर्णित स्थैतिक फैक्ट्री विधि का डिज़ाइन पैटर्न में कोई प्रत्यक्ष समतुल्य नहीं है – Rui

2

मैं इस चुनाव के लिए कम से कम तीन कारणों को देखने (और हाँ कि कारखाना पैटर्न है):

इस तरह यह भविष्य में एक विशेष LocalDate उदाहरण के लिए लौट सकते हैं, जो केवल आंतरिक रूप से बढ़ाया जा सकता है (के बाद से देखते हैं कोई उपयोगकर्ता-availabe रचनाकारों)। इस प्रकार विशेष कक्षाएं ग्राहकों के सामने नहीं आतीं - केवल आंतरिक रूप से जानी जाती हैं। ऐसा लगता है कि रनटाइम पर विभिन्न प्रकारों के बारे में बिल्कुल सही लगता है - इस समय पर वे कोई विशेष उप प्रकार नहीं लौटाते हैं, लेकिन वे भविष्य में हो सकते हैं।

यह उदाहरण के लिए कुछ उदाहरणों को कैश करेगा - मुझे नहीं लगता कि यह फिलहाल ऐसा करता है, लेकिन यह अभी भी एक विकल्प बना हुआ है।

तरीकों में से कुछ वर्णनात्मक नाम है: ofYearDay, ofInstance, आदि

+0

धन्यवाद आपकी राय के लिए एक बहुत :) एक बिंदु मैं संदेह लग रहा है: '' LocalDate' final' वर्ग और * अपरिवर्तनीय * है, इसलिए वहाँ नहीं जा रहा है भविष्य में 0 *31 * भविष्य में – Rui

+0

@ रुई मुझे लगता है, मैंने आंतरिक रूप से बहुत कुछ नहीं देखा है ... – Eugene

+0

यह जावा एपीआई दस्तावेज़ों में स्पष्ट रूप से प्रदर्शित किया गया है :) – Rui

संबंधित मुद्दे