2011-12-20 14 views
10

इस question में कहा जाता है कि मैं instanceof एस के समूह के बजाय विज़िटर पैटर्न का उपयोग कर सकता हूं। जेएमजी ने कहा, "यदि आप ए, बी, और सी को बदलने के लिए स्वतंत्र नहीं हैं, तो आप इसे प्राप्त करने के लिए आगंतुक पैटर्न लागू कर सकते हैं।"स्विच के उदाहरण के बजाय जावा विज़िटर पैटर्न

जहां तक ​​मुझे समझ में आता है मुझे अभी भी ए, बी और सी समर्थन आगंतुक बनाना है (उदाहरण के लिए accept() विधि है)।

मेरी समस्या यह है कि मुझे ए, बी और सी को बदलने की पूरी संभावना नहीं है। मुझे सिर्फ विदेशी पुस्तकालय से कार वस्तु मिलती है और उसे ट्रक, रेस कार और बसों के लिए wash() विधि निर्दिष्ट करना होगा।

मुझे लगता है कि मुझे अभी भी निर्माण instanceof के साथ निर्माण की आवश्यकता है। क्या मैं सही हू?

+0

यह भी देखें http://stackoverflow.com/questions/14136721/converting-many-if-else-statements-to-a-cleaner-approach – Raedwald

+0

यह भी देखें http://stackoverflow.com/questions/18231983/java -alternative-से-अनेक-बाकी-अगर-बयान-साथ-instanceof-स्थिति – Raedwald

उत्तर

9

हां, विज़िटर पैटर्न को लागू करने के लिए अब आपको ए, बी और सी के स्रोत तक पहुंच की आवश्यकता है, जब तक कि सभी वर्गों में एक ही हस्ताक्षर न हो (इसलिए सभी के पास एक ही नाम के साथ धो() विधि है)। यदि ऐसा है, तो आप सही विधि को कॉल करने के लिए बहुरूपता का उपयोग कर सकते हैं।

अन्यथा, यह वर्गों के लिए आप स्रोत कोड के स्तर पर करने के लिए पहुँच नहीं है कार्यक्षमता जोड़ने के लिए संभव है।

नोट:: आगंतुक पैटर्न पर विकिपीडिया लेख पर (http://en.wikipedia.org/wiki/Visitor_pattern) वहाँ जावा उदाहरण नीचे एक छोटा सा फुटनोट है इस पद्धति के एक और अधिक लचीला दृष्टिकोण करने के लिए है स्वीकृति विधि को परिभाषित करने वाले इंटरफ़ेस को कार्यान्वित करने वाला एक रैपर वर्ग बनाएं। रैपर में कार्लेमेंट को इंगित करने वाला एक संदर्भ होता है जिसे कन्स्ट्रक्टर के माध्यम से प्रारंभ किया जा सकता है। यह दृष्टिकोण प्रत्येक तत्व पर एक इंटरफेस को लागू करने से बचाता है। [देखना लेख जावा टिप 98 नीचे दिए गए लेख]

यह इस लेख का संदर्भ: http://www.javaworld.com/javaworld/javatips/jw-javatip98.html

सब यह संभव है में

तो, सब है, लेकिन यह छोटा सा काम आप करना चाहते हैं के लिए कक्षाओं का एक विशाल संख्या देता है। अगर मैं आप थे तो मैं उदाहरण के साथ रहूंगा।

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