डबल-चांस फ़ंक्शन

सॉफ्टवेयर इंजीनियरिंग में, डबल-चांस फ़ंक्शन एक सॉफ़्टवेयर सॉफ्टवेयर पैटर्न है जिसमें क्रॉस-प्लेटफॉर्म और स्केलेबल विकास में एक मजबूत अनुप्रयोग होता है।

कंप्यूटर ग्राफ़िक्स
फ़ंक्शंस के साथ एक ग्राफ़िक्स अप्लिकेशन प्रोग्रामिंग अंतरफलक पर विचार करें,  , और. यह देखना आसान है  के संदर्भ में ही लागू किया जा सकता है , और   बदले में चार कॉलों के माध्यम से कार्यान्वित किया जा सकता है. यदि आप इस एपीआई को एक नए आर्किटेक्चर में पोर्ट कर रहे थे तो आपके पास एक विकल्प होगा: तीन अलग-अलग कार्यों को मूल रूप से लागू करें (कार्यान्वयन में अधिक समय लगेगा, लेकिन संभवतः तेज़ कोड के परिणामस्वरूप), या लिखें  मूल रूप से, और सामान्य, क्रॉस-प्लेटफ़ॉर्म, कोड का उपयोग करके ऊपर वर्णित अनुसार दूसरों को लागू करें। इस दृष्टिकोण का एक महत्वपूर्ण उदाहरण X11 ग्राफिक्स सिस्टम है, जिसे बहुत कम संख्या में डिवाइस-निर्भर प्राइमेटिव प्रदान करके नए ग्राफिक्स हार्डवेयर में पोर्ट किया जा सकता है, जिससे उच्च स्तर के कार्यों को हार्डवेयर-स्वतंत्र परत पर छोड़ दिया जा सकता है। डबल-मौका फ़ंक्शन इस तरह के कार्यान्वयन को बनाने का एक इष्टतम तरीका है, जिससे पोर्ट का पहला ड्राफ्ट बाजार में तेजी से चलने वाले संस्करण का उपयोग कर सकता है, एक सामान्य संस्करण के साथ चलने में धीमा हो सकता है।  फ़ंक्शन, जबकि बाद के संस्करणों को बाज़ार में धीमे, चलने में तेज़ के रूप में संशोधित किया जा सकता है। जहां डबल-चांस पैटर्न स्कोर उच्च है, वह यह है कि बेस एपीआई में नल ड्राइवर के हिस्से के रूप में यहां दिया गया स्व-सहायक कार्यान्वयन शामिल है, और अन्य सभी कार्यान्वयन इसके विस्तार हैं। नतीजतन, पहला पोर्ट, वास्तव में, पहला प्रयोग करने योग्य कार्यान्वयन है।

C++ में एक विशिष्ट कार्यान्वयन हो सकता है: ध्यान दें कि  फ़ंक्शन का कभी भी उपयोग नहीं किया जाता है, क्योंकि कोई भी ग्राफ़िक्स कॉल उसके व्युत्पन्न वर्गों में से एक से होकर गुजरता है। तो एक कॉल   द्वारा एक वर्ग प्रस्तुत करने का यह पहला मौका होगा   कक्षा। यदि कोई मूल कार्यान्वयन मौजूद नहीं है, तो बेस क्लास को कॉल किया जाता है, जिस बिंदु पर आभासी कार्य कार्यभार संभालता है और इसका मतलब है   कहा जाता है। यह देता है   यदि कोई उपलब्ध हो तो मूल कोड का उपयोग करने के लिए "दूसरा मौका" दें।

इस पद्धति के साथ, सैद्धांतिक रूप से, ड्रॉप्वाइंट के रूप में केवल एक मूल फ़ंक्शन का उपयोग करके एक संपूर्ण 3 डी इंजन (सॉफ़्टवेयर रैस्टराइज़िंग लागू करना) बनाना संभव है, अन्य कार्यों को समय मिलने पर लागू किया जाता है। व्यवहार में यह निराशाजनक रूप से धीमा होगा, लेकिन यह दोहरे-मौका कार्यों की संभावनाओं को प्रदर्शित करता है।