डेलिगेशन पैटर्न

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

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

यह लेख सेंडिंग ऑब्जेक्ट/रिसीविंग ऑब्जेक्ट के अतिरिक्त दो ऑब्जेक्ट के लिए रिसीविंग ऑब्जेक्ट/डेलिगेट का उपयोग करता है, इस बात पर बल देता है कि कौन से ऑब्जेक्ट्स ओरिजिनल कॉल नहीं किन्तु डेलिगेशन कॉल सेंड या रिसीव करते हैं।

परिभाषा
गामा एट अल के परिचय में 1994, ग्रैडी बूच ने डेलिगेशन को परिभाषित किया:

"''प्रतिनिधिमंडल रचना को उत्तराधिकार के रूप में पुन: उपयोग के लिए शक्तिशाली बनाने का उपाय है [Lie86, JZ91]। प्रतिनिधिमंडल में, दो ऑब्जेक्ट अनुरोध को संभालने में सम्मलित होते हैं: प्राप्त वस्तु अपने प्रतिनिधि को संचालन प्रदान करती है। यह उपवर्गों के समान है जो माता-पिता वर्गों के अनुरोधों की उपेक्षा हैं। लेकिन वंशानुक्रम के साथ, उत्तराधिकार में मिली कार्यविवरण सदैव सी में इस सदस्य चर और स्मॉलटाक में स्वयं के माध्यम से प्राप्त वस्तु को संदर्भित कर सकती है। प्रत्यायोजन के समान प्रभाव को प्राप्त करने के लिए, प्राप्तकर्ता स्वयं को प्रतिनिधि के पास भेजता है जिससे प्रत्यायोजित संचालन रिसीवर को संदर्भित कर सके।."

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

class Rectangle(val width: Int, val height: Int) {

fun area = width * height } class Window(val bounds: Rectangle) { // Delegation fun area = bounds.area }

लैंग्वेज सपोर्ट
कुछ लैंग्वेज में बिल्ट इन डेलिगेशन के लिए विशेष सपोर्ट है। उदाहरण के लिए, कोटलिन (प्रोग्रामिंग लैंग्वेज) में, हम लिख सकते हैं: interface ClosedShape {

fun area: Int } class Rectangle(val width: Int, val height: Int) : ClosedShape { override fun area = width * height } class Window(private val bounds: ClosedShape) : ClosedShape by bounds

यह भी देखें

 * डेलिगेशन (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)
 * अग्रेषण (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)
 * आस्पेक्ट ओरिएंटेड प्रोग्रामिंग
 * डेलिगेशन (कम्प्यूटिंग)
 * सॉफ्टवेयर डिजाइन पैटर्न
 * फसाड पैटर्न
 * सिज़ोफ्रेनिया (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)

बाहरी संबंध

 * What Is Delegation, WikiWikiWeb
 * Delegation on Rosetta Code