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

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

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

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

C++ में एक विशिष्ट कार्यान्वयन हो सकता है:

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

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