"हैलो, एमिगो! आज, ऐली ने आपको एडॉप्टर पैटर्न के बारे में बताया।"
I/O धाराओं से संबंधित अधिकांश कक्षाएं एडेप्टर के रूप में कार्यान्वित की जाती हैं। वे या तो समतुल्य इंटरफेस को परिवर्तित करते हैं या वे उन्हें जोड़ते हैं, सरल से शुरू होकर जटिल तक बढ़ते हैं।
"क्या InputStreamReader और BufferedReader भी एडेप्टर हैं? बहुत कम से कम, वे जिस तरह से उपयोग किए जाते हैं, वे एडेप्टर के समान हैं: किसी ऑब्जेक्ट के बनने के बाद, इसे किसी अन्य वर्ग के कंस्ट्रक्टर के पास भेज दिया जाता है।"
"हाँ, InputStreamReader , InputStream इंटरफ़ेस को Reader इंटरफ़ेस में रूपांतरित करता है । BufferedReader अपने शुद्धतम रूप में एडॉप्टर नहीं है, क्योंकि Java के रचनाकारों ने इसके तरीकों को अपना अलग इंटरफ़ेस नहीं देने का निर्णय लिया है। लेकिन यह समान भावना है।"
एक बिलियन अलग-अलग वर्ग लिखने के बजाय, जावा के रचनाकारों ने दो दर्जन एडेप्टर लिखे और उन्हें एक-दूसरे से जुड़ने की अनुमति दी, हालांकि एक प्रोग्रामर चाहेगा।
यह तरीका बहुत सुविधाजनक है। एक प्रोग्रामर हमेशा अपनी कक्षा और/या एडॉप्टर लिख सकता है, इसे एक मानक इंटरफ़ेस लागू कर सकता है, और इसे एडेप्टर ऑब्जेक्ट्स की श्रृंखला में शामिल कर सकता है जो वह बना रहा है।
"तो इस तरह यह सब काम करता है। बड़ी जटिल कक्षाओं के बजाय, हम सरल वस्तुओं और एडेप्टर की श्रृंखला बनाते हैं। और फिर आप बस उन्हें बनाते हैं और उन्हें सही क्रम में जोड़ते हैं!"
"और आप जो कुछ भी याद कर रहे हैं उसे लागू करते हैं।"
"हाँ मुझे समझ में आ गया है।"
"लेकिन वास्तव में मैं आज आपको रीडर और राइटर के बारे में बताना चाहता था । ये दो अमूर्त वर्ग हैं जो इनपुटस्ट्रीम और आउटपुटस्ट्रीम कक्षाओं के समान हैं। लेकिन उन वर्गों के विपरीत, ये दो वर्ग पात्रों के साथ काम करते हैं। वे पात्रों को पढ़ते और लिखते हैं। वे हैं पाठ्य सूचना के साथ काम करते समय बहुत सुविधाजनक। आइए उनके तरीकों पर एक नज़र डालें:"
पाठक के तरीके | विधि क्या करती है |
---|---|
|
"यह विधि तुरंत कई वर्णों को बफ़र ( चार सरणी ) में पढ़ती है, जब तक कि बफ़र भर नहीं जाता है या जब तक स्रोत में पढ़ने के लिए और वर्ण नहीं होते हैं।" विधि वास्तव में पढ़े गए वर्णों की संख्या लौटाती है (जो सरणी की लंबाई से कम हो सकती है) |
|
"यह विधि एक वर्ण को पढ़ती है और उसे लौटाती है। परिणाम दिखने के लिए एक int तक चौड़ा हो जाता है। यदि कोई वर्ण उपलब्ध नहीं हैं, तो विधि -1 लौटाती है।" |
|
यदि पढ़ने के तरीकों के लिए कोई अपठित वर्ण हैं तो यह विधि सही हो जाती है |
|
यह विधि धारा को "बंद" करती है। आप इसे तब कहते हैं जब आप स्ट्रीम के साथ काम करना समाप्त कर लेते हैं। ऑब्जेक्ट तब फ़ाइल आदि को बंद करने के लिए आवश्यक हाउसकीपिंग संचालन करता है। इस बिंदु पर, आप स्ट्रीम से और डेटा नहीं पढ़ सकते हैं। |
"यह पता चला है कि Reader's read(char [] cbuf) विधि हमें एक समय में एक वर्ण के बजाय वर्णों के पूरे ब्लॉक को पढ़ने देती है। इसलिए यह तेज़ और अधिक सुविधाजनक है।"
"बिल्कुल सही। और अब देखते हैं कि लेखक के पास क्या तरीके हैं:"
तरीका | विधि क्या करती है |
---|---|
|
यह विधि एक वर्ण लिखती है। int प्रकार एक char तक सीमित है। अतिरिक्त भाग को बस त्याग दिया जाता है। |
|
यह विधि वर्णों की एक सरणी लिखती है। |
|
यह विधि एक स्ट्रिंग लिखती है। इसे केवल वर्णों की एक सरणी में परिवर्तित किया जाता है और फिर दूसरी विधि कहलाती है। |
|
यदि स्ट्रीम आंतरिक रूप से कोई डेटा संग्रहीत कर रही है जो अभी तक लिखा नहीं गया है, तो यह विधि इसे लिखने के लिए बाध्य करती है। |
|
यह विधि धारा को "बंद" करती है। आप इसे तब कहते हैं जब आप स्ट्रीम के साथ काम करना समाप्त कर लेते हैं। ऑब्जेक्ट तब फ़ाइल को बंद करने के लिए आवश्यक हाउसकीपिंग संचालन करता है, आदि। अब आप डेटा को स्ट्रीम में नहीं लिख सकते हैं, और फ़्लश को स्वचालित रूप से कॉल किया जाता है। |
यह समझना महत्वपूर्ण है कि पाठक और लेखक अमूर्त वर्ग हैं। वे कुछ नहीं करते हैं और वस्तुतः कोई कोड नहीं होता है। उनके सभी तरीकों को उन कक्षाओं में लागू करने की आवश्यकता होगी जो उन्हें विरासत में मिली हैं। उनका काम मानकीकृत करना है कि कक्षाएं कैसे इंटरैक्ट करती हैं । डेवलपर्स को एक दूसरे के साथ बातचीत करने के लिए अपने स्वयं के मानकों का आविष्कार करने की आवश्यकता नहीं है। कुछ बुनियादी मानकों को बनाए रखना सभी के लिए अधिक सुविधाजनक है। यह विभिन्न प्रोग्रामर द्वारा लिखी गई कक्षाओं को न केवल जावा के रचनाकारों द्वारा लिखी गई कक्षाओं के साथ, बल्कि अन्य प्रोग्रामरों द्वारा लिखी गई कक्षाओं के साथ भी आसानी से इंटरैक्ट करने की अनुमति देता है।
मानक शक्तिशाली हैं।
"मैं सहमत हूं। सामान्य मानकों का समर्थन करना सभी के लिए फायदेमंद है।"
GO TO FULL VERSION