क्या जावा IO कक्षाओं में डेकोरेटर पैटर्न मौजूद है?


14

एक असाइनमेंट के लिए, मुझे यह पता लगाना होगा कि गैंग ऑफ़ फोर में कौन सी डिज़ाइन पैटर्न की क्लासेस java.io.Readerऔर उसके सबक्लासेस हैं java.io.PushbackReader, java.io.BufferedReaderऔर java.io.FilterReaderउनके साथ बनाया गया था।

इस पोस्ट के अनुसार , डिज़ाइन पैटर्न डेकोरेटर पैटर्न होगा। यह केवल मेरे लिए समझ में आता है अगर PushbackReader, BufferedReaderऔर FilterReaderएक ही समय में उपयोग करने के लिए सजाया जा सकता है, जिससे प्रभावी ढंग से ए BufferedPushbackFilterReader। क्या यह विचार है?


उन वर्गों के निर्माणकर्ताओं को देखें। क्या वे आपको ढेर करने की अनुमति देते हैं, जैसे Buffered प्रकृति के शीर्ष पर Filterप्रकृति?
किलन फथ

@ किलियन फोथ: ऐसा लगता है।

जवाबों:


10

हां, आप वास्तव में उन्हें इस तरह से सजा सकते हैं। बस निम्नलिखित पर विचार करें

PushbackReader pushbackBufferedReader = new PushbackReader(
     new BufferedReader(original));

यह एक मूल पाठक को सजाएगा

  • पहले बफ़र करें
  • और फिर पुशबैक / अपठित कार्यक्षमता सक्षम करें (अभी भी परिणाम बफर है ..)

FilterReaderऔर Readerपदानुक्रम में आधार वर्ग हैं ...


और BufferedReader, FilterReaderऔर PushbackReaderकी सज्जाकार हैं Reader, है ना?

1
हाँ, यह सही है।
duffymo

1
हाँ - बफ़रड्रेडर अंतर्निहित पाठक को बफ़र करता है,

11

डेकोरेटर पैटर्न यहाँ लागू होता है क्योंकि BufferedReaderwraps एक Reader- यह अभी भी एक Reader(यह के सभी तरीकों है Reader), लेकिन यह अधिक "घंटियाँ और सीटी" (अधिक तरीकों) है।

यहां एक उदाहरण दिखाया गया है कि एक वर्ग किस तरह से लपेटता है, इसकी कार्यक्षमता को "सजाता है", और आप उन्हें सजाने के लिए रख सकते हैं:

        new BufferedReader(new FileReader(new File("some.file")));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.