जब आप बहुरूपता की अवधारणा का उपयोग करते हैं तो आप एक वर्ग पदानुक्रम बनाते हैं और माता-पिता के संदर्भ का उपयोग करके आप इंटरफ़ेस फ़ंक्शन को यह जानने के बिना कॉल करते हैं कि किस विशिष्ट प्रकार की वस्तु है। यह भी खूब रही। उदाहरण:
आपके पास जानवरों का संग्रह है और आप सभी जानवरों के कार्यों को बुलाते हैं eat
और आपको यह ध्यान नहीं है कि यह एक कुत्ता खाने वाला या बिल्ली है। लेकिन एक ही श्रेणी के पदानुक्रम में आपके पास ऐसे जानवर हैं जिनके पास अतिरिक्त है - वर्ग से विरासत में मिला और लागू किया गया Animal
, जैसे makeEggs
, getBackFromTheFreezedState
और इसी तरह। तो कुछ मामलों में आप कार्य करते हैं आप अतिरिक्त व्यवहार को कॉल करने के लिए विशिष्ट प्रकार जानना चाह सकते हैं।
उदाहरण के लिए, यदि यह सुबह का समय है और यदि यह सिर्फ एक जानवर है तो आप कॉल करें eat
, अन्यथा यदि यह एक मानव है, तो पहले कॉल करें washHands
, getDressed
और उसके बाद ही कॉल करें eat
। इस मामले को कैसे संभालें? बहुरूपता मर जाता है। आपको ऑब्जेक्ट के प्रकार का पता लगाने की आवश्यकता है, जो एक कोड गंध की तरह लगता है। क्या इस मामलों को संभालने के लिए एक आम तरीका है?
Eater
इंटरफ़ेस को eat()
विधि के साथ परिभाषित करते हैं , तो एक ग्राहक के रूप में, आपको परवाह नहीं है कि Human
इसे लागू करने के लिए पहले कॉल करना होगा washHands()
और getDressed()
, यह इस वर्ग का कार्यान्वयन विवरण है। यदि, एक ग्राहक के रूप में, आप इस तथ्य की परवाह करते हैं, तो आप सबसे अधिक संभावना है कि आप नौकरी के लिए सही उपकरण का उपयोग नहीं करेंगे।
getDressed
उनसे पहले की आवश्यकता हो सकती है eat
, दोपहर के भोजन के लिए ऐसा नहीं है। आपकी परिस्थितियों के आधार पर, washHands();if !dressed then getDressed();[code to actually eat]
मानव के लिए इसे लागू करने का सबसे अच्छा तरीका हो सकता है। एक अन्य संभावना यह है कि यदि अन्य चीजों की आवश्यकता होती है washHands
और / या getDressed
कहा जाता है? मान लो तुम्हारे पास है leaveForWork
? आपको अपने प्रोग्राम के फ्लो को स्ट्रक्चर करने की आवश्यकता हो सकती है जैसे कि यह वैसे भी बहुत पहले कहा जाता है।