मैं एक प्रोग्रामिंग लेख पढ़ रहा था और इसने डेकोरेटर पैटर्न का उल्लेख किया। मैं थोड़ी देर के लिए प्रोग्रामिंग कर रहा हूं, लेकिन किसी भी प्रकार की औपचारिक शिक्षा या प्रशिक्षण के बिना, लेकिन मैं मानक पैटर्न और इस तरह के बारे में जानने की कोशिश कर रहा हूं।
इसलिए मैंने डेकोरेटर को देखा, और उस पर एक विकिपीडिया लेख पाया । अब मैं डेकोरेटर पैटर्न की अवधारणा को समझता हूं, लेकिन मैं इस मार्ग से थोड़ा भ्रमित था:
एक उदाहरण के रूप में, एक विंडोिंग सिस्टम में एक विंडो पर विचार करें। विंडो की सामग्री को स्क्रॉल करने की अनुमति देने के लिए, हम उपयुक्त के रूप में क्षैतिज या ऊर्ध्वाधर स्क्रॉलबार जोड़ना चाह सकते हैं। मान लें कि विंडो विंडो वर्ग के उदाहरणों द्वारा दर्शाई गई हैं, और मान लें कि इस वर्ग में स्क्रॉलबार जोड़ने की कोई कार्यक्षमता नहीं है। हम एक उपवर्ग स्क्रॉलिंग विन्डोज़ बना सकते हैं जो उन्हें प्रदान करता है, या हम एक स्क्रॉलिंग विन्डोविकेटर बना सकते हैं जो इस कार्यक्षमता को मौजूदा विंडो ऑब्जेक्ट्स में जोड़ता है। इस बिंदु पर, या तो समाधान ठीक होगा।
अब मान लेते हैं कि हम अपनी खिड़कियों में सीमाओं को जोड़ने की क्षमता भी चाहते हैं। फिर से, हमारे मूल विंडो वर्ग का कोई समर्थन नहीं है। स्क्रॉलिंगविंडो उपवर्ग अब एक समस्या बन गया है, क्योंकि इसने प्रभावी रूप से एक नई तरह की खिड़की बनाई है। अगर हम सभी विंडो में बॉर्डर सपोर्ट जोड़ना चाहते हैं, तो हमें सबक्लास विंडोविथबॉर्डर और स्क्रॉलिंगविंडो वाउन्डबॉन्ड्रार्ड बनाना होगा। जाहिर है, यह समस्या हर नई सुविधा को जोड़ने के साथ खराब हो जाती है। डेकोरेटर सॉल्यूशन के लिए, हम बस एक नया BorderedWindowDecorator बनाते हैं- रनटाइम में, हम मौजूदा विंडो को ScrollingWindowDecorator या BorderedWindowDecorator या दोनों से सजा सकते हैं, जैसा कि हम फिट देखते हैं।
ठीक है, जब वे सभी विंडो में सीमाएं जोड़ने के लिए कहते हैं, तो विकल्प की अनुमति देने के लिए मूल विंडो वर्ग में कार्यक्षमता क्यों नहीं जोड़ते हैं? जिस तरह से मैं इसे देखता हूं, उपवर्ग बस एक वर्ग के लिए विशिष्ट कार्यक्षमता जोड़ने, या एक वर्ग विधि को ओवरराइड करने के लिए है। अगर मुझे सभी मौजूदा वस्तुओं में कार्यक्षमता जोड़ने की आवश्यकता है, तो मैं ऐसा करने के लिए सिर्फ सुपरक्लास को क्यों नहीं संशोधित करूंगा?
लेख में एक और पंक्ति थी:
डेकोरेटर पैटर्न उपवर्ग का एक विकल्प है। उप-वर्ग संकलन समय पर व्यवहार जोड़ता है, और परिवर्तन मूल वर्ग के सभी उदाहरणों को प्रभावित करता है; सजाने के लिए अलग-अलग वस्तुओं के लिए रन-टाइम पर नया व्यवहार प्रदान कर सकते हैं।
मुझे नहीं मिलता कि वे कहाँ कहते हैं "... परिवर्तन मूल वर्ग के सभी उदाहरणों को प्रभावित करता है" - उपवर्ग कैसे मूल वर्ग को बदलता है? उपवर्ग के पूरे बिंदु नहीं है?
मैं यह मानकर चल रहा हूं कि कई विकी की तरह लेख भी स्पष्ट रूप से नहीं लिखा गया है। मैं उस अंतिम पंक्ति में डेकोरेटर की उपयोगिता देख सकता हूं - "... व्यक्तिगत वस्तुओं के लिए रन-टाइम पर नया व्यवहार प्रदान करता हूं"।
इस पैटर्न के बारे में पढ़े बिना, अगर मुझे अलग-अलग वस्तुओं के लिए रन-टाइम में व्यवहार को बदलने की आवश्यकता होती है, तो मैंने संभवतः व्यवहार को सक्षम / अक्षम करने के लिए सुपर या उपवर्ग में कुछ तरीकों का निर्माण किया होगा। कृपया मुझे वास्तव में डेकोरेटर की उपयोगिता को समझने में मदद करें, और मेरी नौसिखिया सोच क्यों दोषपूर्ण है?