डिज़ाइन पैटर्न

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

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

विवरण
एक विशेष क्षेत्र से संबंधित डिजाइन पैटर्नों का संगठित संग्रह को एक पैटर्न भाषा कहा जाता है यह भाषा परिस्थितियों के डिजाइनरों के साथ सामना करने के लिए एक सामान्य शब्दावली देती है।

इस भाषा के तत्व पैटर्न कहा जाता है। प्रत्येक पैटर्न एक ऐसी समस्या का वर्णन करता है जो हमारे पर्यावरण में बार-बार आती है, और फिर उस समस्या के समाधान के मूल का वर्णन करता है, इस तरीके से कि आप इस समाधान का एक लाख बार उपयोग कर सकते हैं, इसे बिना दो बार दोबारा । – क्रिस्टोफर सिकंदर

एक पैटर्न को प्रलेखन में यह समझा जाना आवश्यक है कि किसी विशेष स्थिति में समस्या क्यों पैदा होती है, और कैसे समाधान के लिए पैटर्न के घटक एक-दूसरे से संबंधित होते हैं। क्रिस्टोफर अलेक्जेंडर, “विरोधाभासी ताकतों” से उत्पन्न होने वाली सामान्य डिजाइन समस्याओं का वर्णन करते हैं – जैसे कि एक कमरे को धूप में रहने के बीच संघर्ष और गर्मी के दोपहर को अधिक गर्म न होने की इच्छा। एक पैटर्न डिज़ाइनर को बताएगा कि कमरे में कितनी खिड़कियाँ डालनी होंगी; इसके बजाय, यह डिजाइनर को अपने विशेष आवेदन के लिए सबसे अच्छा निर्णय लेने के लिए मार्गदर्शन करने के लिए मूल्यों का एक सेट प्रस्तावित करेगा। उदाहरण के लिए, अलेक्जेंडर से पता चलता है कि सभी कमरे के चारों ओर प्रकाश को प्रत्यक्ष करने के लिए पर्याप्त खिड़कियां शामिल की जानी चाहिए। वह यह एक अच्छा समाधान मानता है क्योंकि उनका मानना ​​है कि यह अपने रहने वालों द्वारा कमरे का आनंद बढ़ाता है। अन्य लेखक अलग-अलग निष्कर्ष पर आ सकते हैं, अगर वे हीटिंग लागतों पर उच्च मूल्य या भौतिक लागतों को रखते हैं। ये मान, जो पैटर्न के लेखक द्वारा “सर्वोत्तम” कौन सा समाधान निर्धारित करने के लिए उपयोग किया जाता है, पैटर्न के भीतर भी दस्तावेज होना चाहिए।

पैटर्न प्रलेखन को तब भी समझा जाना चाहिए जब यह लागू हो। चूंकि दो घर एक-दूसरे से बहुत भिन्न हो सकते हैं, घर के लिए एक डिज़ाइन पैटर्न दोनों के लिए आवेदन करने के लिए व्यापक होना चाहिए, लेकिन इतना अस्पष्ट नहीं है कि यह डिजाइनर निर्णय लेने में मदद नहीं करता है। परिस्थितियों की श्रेणी जिसमें एक पैटर्न का इस्तेमाल किया जा सकता है, इसका संदर्भ कहलाता है कुछ उदाहरण “सभी घर”, “सभी दो मंजिला घर”, या “सभी जगह जहां लोग समय बिताने” हो सकते हैं

उदाहरण के लिए, क्रिस्टोफर अलेक्जेंडर के काम में, सर्जरी केंद्र में बस स्टॉप और इंतजार करने वाले कमरे दोनों “पैटर्न के लिए जगह” के संदर्भ के संदर्भ में हैं।

डिजाइन पैटर्न कक्षाएं
क्वाड्रुपल गैंग्स डिज़ाइन पैटर्न्स बुक (आईएसबीएन 0-201-63361-2) डिजाइन पैटर्न के तीन पैटर्नों को अलग करता है, लेकिन कोई तेज मानदंड नहीं है जो उन्हें एक दूसरे से अलग करता है

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

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

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

सॉफ़्टवेयर सिस्टम में क्रिएशन पैटर्न की दुकान होती है, जो ऑब्जेक्ट इंस्टेंस में कंक्रीट क्लास का इस्तेमाल होता है, साथ ही ये उदाहरण कैसे बनाए जाते हैं और इकट्ठे होते हैं।

फैक्टरी विधि
ऑब्जेक्ट के निर्माण के लिए उपयोग किए जाने वाले एकल इंटरफ़ेस के तहत ऑब्जेक्ट कैसे बनता है, इसने यह पाया है कि यह ऑब्जेक्ट सर्विंग फ़ंक्शंस को उप-क्लासेस में छोड़कर इंटरफ़ेस में छोड़ देता है।

उदाहरण (प्रोटोटाइप पैटर्न)
जटिल और / या महंगे वर्गों से वस्तुओं का निर्माण करते समय, वे नए ऑब्जेक्ट को अपने मौजूदा संस्करणों से नमूना बनाने की अनुमति देते हैं, जो शुरुआत से ही बनाया जा रहा है। इस तरह, नई वस्तुओं को आसानी से बनाया जाता है और संसाधनों को अनावश्यक रूप से कब्जा नहीं किया जाता है।

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

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

सिंगलटन पैटर्न
एक वर्ग में, केवल एक ऑब्जेक्ट बनाया जाना है। इस ऑब्जेक्ट को एप्लिकेशन में कहीं से भी एक्सेस किया जा सकता है। वस्तु तब तक नहीं बनाई जा सकती जब तक पहली बार इसका उपयोग नहीं किया जाता है।

संरचनात्मक पैटर्न
यह ऐसे सुझाव प्रदान करता है जो संरचनात्मक पैटर्न वर्गों और वस्तुओं के संयोजन से व्यापक सॉफ्टवेयर संरचनाओं के निर्माण की अनुमति प्रदान करता है। कक्षा संरचना पैटर्न और वस्तु संरचना पैटर्न दो में विभाजित हैं।

कक्षा संरचना पैटर्न कक्षा उत्तराधिकार या जटिल अनुप्रयोगों का उपयोग करके निर्माण का निर्माण करते हैं। ऑब्जेक्ट स्ट्रक्चर पैटर्न दर्शाते हैं कि नए कार्यों को प्राप्त करने के लिए ऑब्जेक्ट को कैसे गठबंधन करना

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

मुखौटा (मुखौटा पैटर्न)
यह एक जटिल संरचना को एक इंटरफ़ेस में एक साथ उपयोग करने की अनुमति देता है।

डेकोरेटर पैटर्न
यह किसी ऑब्जेक्ट को ऑब्जेक्ट को बदलने के बिना नई जिम्मेदारियों को जोड़ने की अनुमति देता है। उप-वर्गीकरण के बिना वस्तुओं की कार्यक्षमता में सुधार करना संभव है।

ब्रिज पैटर्न
यह दोनों इंटरफेस और ठोस कार्यान्वयन को एक दूसरे से अलग करने की अनुमति देता है। अंतरफलक बदलना इंटरफ़ेस को प्रभावित नहीं करता है। दोनों को स्वतंत्र रूप से विकसित किया जा सकता है

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

एडेप्टर पैटर्न
इसका इस्तेमाल विभिन्न स्रोतों से वस्तुओं या कक्षाओं के इंटरफेस को अनुकूलित करने के लिए किया जाता है।

प्रॉक्सी पैटर्न
ऑब्जेक्ट्स के निर्माण के लिए जटिल, महंगी और कठिन उपयोग करने के लिए इंटरफ़ेस की नकल करना संभव है। यह ऑब्जेक्ट के भौतिक वस्तु के अभिविन्यास को उपयोगकर्ता से छिपाने के लिए उपयोग करने की अनुमति देता है।

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

व्यवहार के पैटर्न को भी दो में विभाजित किया जाता है, जैसे वे संरचनात्मक पैटर्न में होते हैं: वर्ग व्यवहार पैटर्न और वस्तु व्यवहार पैटर्न

वर्ग व्यवहार पैटर्न विरासत का उपयोग वर्गों में वितरित करने के लिए व्यवहार को सक्षम करता है। ऑब्जेक्ट वर्तन पैटर्न ऑब्जेक्ट ग्रुप के माध्यम से व्यवहार को प्राप्त करना संभव बनाता है, जो ऑब्जेक्ट कन्ज़्यूशन के माध्यम से एक ऑब्जेक्ट द्वारा आसानी से प्राप्त नहीं किया जा सकता है।

मध्यस्थ पैटर्न
एक-दूसरे के साथ जुड़ी वस्तुओं को एक ही छत के नीचे एक बिंदु से (जो कि खोजक द्वारा) निर्देशित किया जा सकता है। खोज खोजक से कनेक्ट ऑब्जेक्ट खोज खोजक को स्थिति परिवर्तनों को संवादित करते हैं। खोजक को एप्लिकेशन द्वारा आवश्यक संपादन और आदेश से संबंधित वस्तुओं से अनुरोध मिलता है। शीर्ष-स्तरीय उपयोगकर्ता ऑब्जेक्ट केवल खोजक से कनेक्ट होते हैं।

राज्य पैटर्न
यह किसी ऑब्जेक्ट को अपनी स्थिति के अनुसार अपने व्यवहार को बदलने की अनुमति देता है। उपयोगकर्ता के नजरिए से, यह धारणा देता है कि आप ऑब्जेक्ट क्लास को संशोधित कर रहे हैं। यह एप्लिकेशन द्वारा आवश्यक दिशा में नए व्यवहारों को जोड़ा और निकाला जा सकता है। उपयोगकर्ता ऑब्जेक्ट ऐसे परिवर्तनों से प्रभावित नहीं हैं

प्रेक्षक पैटर्न
यह ऑब्जेक्ट्स, पर्यवेक्षकों के एक समूह को एक ऑब्जेक्ट ऑब्जेक्ट में परिवर्तनों के बारे में स्वतः सूचित करता है। निरीक्षण के तहत वस्तु स्वतंत्र रूप से काम करती रही है जो ट्रैक किए जा रहे हैं। नए पर्यवेक्षक भाग लेने या समय पर छोड़ने के लिए संभव है। इस तरह से आवेदन समय के साथ व्यवहार बदल सकता है।

टेम्पलेट विधि पैटर्न
यह एक समाधान का समाधान टेम्पलेट के रूप में उपयोग करने की अनुमति देता है। यह संभव है कि मरने के कुछ प्रोसेसिंग चरणों को उप-क्लासेस द्वारा संसाधित किया जा सके। इसलिए, कुछ मध्यवर्ती कदम मुख्य पैटर्न को बदलने के बिना बदला जा सकता है। उपयोगकर्ता इन परिवर्तनों से अवगत नहीं हैं

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

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

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

यदीगिर (स्मृति चिन्ह)
यदीगियर का प्रयोग उन वस्तुओं के राज्यों को छिपाने के लिए किया जाता है जो एप्लिकेशन सॉफ़्टवेयर में महत्वपूर्ण भूमिका निभाते हैं और उन्हें याद दिलाने या याद दिलाने के लिए जब आवश्यक हो।

इटरेटर पैटर्न
यह सुनिश्चित करता है कि ऑब्जेक्ट्स जन ऑब्जेक्ट (एग्रग्रैगेट ऑब्जेक्ट) के अंतर्गत स्थित हो सकते हैं क्रम में, ऑब्जेक्ट का प्रतिनिधित्व या एहसास कैसे हो सकता है। इस तरह से दर्शाए गए ऑब्जेक्ट को एक इंटरफ़ेस के माध्यम से एक्सेस किया जा सकता है।

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

विज़िटर पैटर्न
यह एक परिसर संरचना पर नई संचालन को जोड़ने की अनुमति देता है। विज़िटर यौगिक संरचना के भीतर व्यक्तिगत वस्तुओं का दौरा करता है, आवश्यक जानकारी एकत्र करता है, इसकी प्रक्रिया करता है, और इसे उपयोगकर्ता को प्रस्तुत करता है