मार्कर इंटरफ़ेस पैटर्न
This article needs additional citations for verification. (June 2013) (Learn how and when to remove this template message) |
मार्कर इंटरफ़ेस पैटर्न कंप्यूटर विज्ञान में एक डिज़ाइन पैटर्न (कंप्यूटर विज्ञान) है, जिसका उपयोग उन भाषाओं के साथ किया जाता है जो वस्तुओं के बारे में रन-टाइम प्रकार की जानकारी प्रदान करते हैं। यह मेटाडेटा को एक ऐसे वर्ग से संबद्ध करने का साधन प्रदान करता है जहां भाषा में ऐसे मेटाडेटा के लिए स्पष्ट समर्थन नहीं है।
इस पद्धति का उपयोग करने के लिए, एक वर्ग (कंप्यूटर विज्ञान) एक मार्कर इंटरफ़ेस लागू करता है[1] (टैगिंग इंटरफ़ेस भी कहा जाता है) जो एक खाली इंटरफ़ेस है,[2] और वे तरीके जो इंटरफ़ेस के अस्तित्व के लिए उस वर्ग परीक्षण के उदाहरणों के साथ सहभागिता करते हैं। जबकि एक विशिष्ट इंटरफ़ेस (कंप्यूटर विज्ञान) कार्यक्षमता निर्दिष्ट करता है (विधि घोषणाओं के रूप में) जिसे एक कार्यान्वयन वर्ग को समर्थन देना चाहिए, एक मार्कर इंटरफ़ेस को ऐसा करने की आवश्यकता नहीं है। इस तरह के इंटरफ़ेस की मात्र उपस्थिति कार्यान्वयन वर्ग के विशिष्ट व्यवहार को इंगित करती है। हाइब्रिड इंटरफेस, जो दोनों मार्कर के रूप में कार्य करते हैं और आवश्यक विधियों को निर्दिष्ट करते हैं, संभव हैं लेकिन अनुचित तरीके से उपयोग किए जाने पर भ्रामक साबित हो सकते हैं।
उदाहरण
जावा (प्रोग्रामिंग भाषा) से मार्कर इंटरफेस के अनुप्रयोग का एक उदाहरण है Serializable
इंटरफेस:
package java.io;
public interface Serializable {
}
एक वर्ग इस इंटरफ़ेस को यह इंगित करने के लिए लागू करता है कि इसके गैर-क्षणिक (कंप्यूटर प्रोग्रामिंग) डेटा सदस्यों को एक को लिखा जा सकता है ObjectOutputStream
. ObjectOutputStream
ई> निजी विधि writeObject0(Object,boolean)
की एक श्रृंखला शामिल है instanceof
लेखन योग्यता निर्धारित करने के लिए परीक्षण, जिनमें से एक के लिए दिखता है Serializable
इंटरफेस। यदि इनमें से कोई भी परीक्षण विफल हो जाता है, तो विधि एक को फेंक देती है NotSerializableException
.
समालोचना
मार्कर इंटरफेस के साथ एक बड़ी समस्या यह है कि एक इंटरफ़ेस कक्षाओं को लागू करने के लिए एक अनुबंध को परिभाषित करता है, और यह अनुबंध सभी उपवर्गों द्वारा विरासत में मिला है। इसका मतलब है कि आप मार्कर को लागू नहीं कर सकते हैं। दिए गए उदाहरण में, यदि आप एक उपवर्ग बनाते हैं जिसे आप क्रमबद्ध नहीं करना चाहते हैं (शायद इसलिए कि यह क्षणिक स्थिति पर निर्भर करता है), तो आपको स्पष्ट रूप से फेंकने का सहारा लेना चाहिए NotSerializableException
(प्रति ObjectOutputStream
डॉक्स)
मेटा डेटा को सीधे समर्थन देने के लिए भाषा के लिए एक और समाधान है:
- .NET फ्रेमवर्क और जावा (सॉफ्टवेयर प्लेटफॉर्म) दोनों (जावा 5 (1.5) के अनुसार) ऐसे मेटाडेटा के लिए समर्थन प्रदान करते हैं। .NET में, उन्हें कस्टम विशेषताएँ कहा जाता है, जावा में उन्हें जावा एनोटेशन कहा जाता है। अलग-अलग नामों के बावजूद, वे वैचारिक रूप से एक ही चीज़ हैं। उन्हें कक्षाओं, सदस्य चर, विधियों और विधि मापदंडों पर परिभाषित किया जा सकता है और प्रतिबिंब (कंप्यूटर विज्ञान) का उपयोग करके इसका उपयोग किया जा सकता है।
- पायथन (प्रोग्रामिंग लैंग्वेज) में, ज़ोप और प्लोन (सॉफ्टवेयर) में मार्कर इंटरफ़ेस शब्द आम है। इंटरफेस को मेटाडेटा के रूप में घोषित किया जाता है और उपवर्ग उपयोग कर सकते हैं
implementsOnly
घोषित करने के लिए कि वे अपने सुपर क्लास से सब कुछ लागू नहीं करते हैं।
यह भी देखें
- इस पैटर्न के विस्तार के लिए डिजाइन मार्कर
संदर्भ
- ↑ Bloch, Joshua (2008). "Item 37: Use marker interfaces to define types". Effective Java (Second ed.). Addison-Wesley. p. 179. ISBN 978-0-321-35668-0.
- ↑ "जावा में मार्कर इंटरफ़ेस". GeeksforGeeks (in English). 2017-03-06. Retrieved 2022-05-01.
अग्रिम पठन
Effective Java[1] by Joshua Bloch.
- ↑ Bloch, Joshua (2018). Effective Java (Third ed.). Boston. ISBN 978-0-13-468599-1. OCLC 1018432176.
{{cite book}}
: CS1 maint: location missing publisher (link)