डिजाइन पैटर्न उपकरण हैं। उपकरणों की तरह, उनके उपयोग के दो तरीके हैं: सही तरीका, और गलत तरीका। उदाहरण के लिए, यदि मैं आपको एक पेचकश और एक कील देता हूं, और आपको लकड़ी के दो टुकड़ों को एक साथ जोड़ने के लिए कहता हूं , तो आपको मुझसे एक हथौड़ा मांगना चाहिए । हथौड़ों का उपयोग नाखूनों के लिए किया जाता है, जबकि स्क्रू ड्रायर्स का उपयोग शिकंजा के लिए किया जाता है।
बहुत बार, एक डिज़ाइन पैटर्न को वन ट्रू वे के रूप में विज्ञापित किया जाता है, जो अक्सर केवल सच होता है जब विशेष समस्याएं उत्पन्न होती हैं। जूनियर डेवलपर अक्सर बच्चों की तरह होते हैं, जब उन्हें खेलने के लिए कुछ नया मिलता है; वे उस डिज़ाइन पैटर्न को हर चीज़ पर लागू करना चाहते हैं । और इसके साथ स्वाभाविक रूप से कुछ भी गलत नहीं है, इसलिए जब तक वे अंततः सीखते हैं कि पैटर्न ए समस्या बी पर लागू होता है, और पैटर्न सी समस्या डी पर लागू होता है। जैसे आप नाखून ड्राइव करने के लिए एक पेचकश का उपयोग नहीं करते हैं, आप किसी विशेष का उपयोग नहीं करते हैं पैटर्न सिर्फ इसलिए कि यह मौजूद है; आप पैटर्न का उपयोग करते हैं क्योंकि यह नौकरी के लिए सबसे अच्छा (ज्ञात) उपकरण है।
पैटर्न के फ्लिप पक्ष विरोधी पैटर्न हैं। चीजें जो समय और फिर से खराब साबित हुई हैं, आमतौर पर निष्पादन समय या स्मृति के संदर्भ में। हालांकि, दोनों पैटर्न और एंटी-पैटर्न डेवलपर के लिए अच्छा नहीं है जो समझ में नहीं आता है कि वे क्यों मौजूद हैं। डेवलपर्स यह सोचना पसंद करते हैं कि वे जो कर रहे हैं वह नया और आविष्कारशील है, लेकिन अधिकांश समय, वे नहीं हैं। यह पहले सोचा गया है। उनसे पहले लोगों ने अनुभव के कारण पैटर्न बनाया है।
बेशक, जूनियर डेवलपर्स अक्सर पुरानी चीजों को करने के नए तरीकों के साथ आते हैं, और कभी-कभी वे तरीके बेहतर होते हैं। हालाँकि, बहुत बार यह डायनेस्टी-क्रूगर प्रभाव का मामला बन जाता है; डेवलपर केवल एक कार्यात्मक कार्यक्रम बनाने के लिए पर्याप्त जानता है, लेकिन अपनी स्वयं की सीमाओं को नहीं समझता है। अतीत को पाने का एकमात्र तरीका अनुभव के माध्यम से लगता है, सकारात्मक और नकारात्मक दोनों। वे पैटर्न की अनदेखी करते हैं क्योंकि वे खुद को श्रेष्ठ मानते हैं, लेकिन यह नहीं जानते कि, वास्तव में, 10,000 डेवलपर्स ने पहले से ही एक विशिष्ट डिजाइन का उपयोग किया है, और फिर इसे त्याग दिया क्योंकि यह वास्तव में खराब था।
फुर्ती से ग्राहक की जरूरतों को तेजी से समायोजित करने के संबंध में "जिम्मेदारी से काम किया जाना" का पक्षधर है। यह न तो डिजाइन पैटर्न का पक्षधर है और न ही उनका तिरस्कार करता है। यदि एक पैटर्न सबसे तेज़, सबसे विश्वसनीय तरीका है, तो डेवलपर को इसका उपयोग करना चाहिए। यदि किसी विशेष पैटर्न को "इसे पूरा करने" की तुलना में अधिक समय खर्च होता है, तो ऐसी चीज़ का उपयोग करना जो पैटर्न नहीं है, संभवतः ठीक है (यह मानते हुए, कि प्रदर्शन गंभीर रूप से नीचा नहीं है, आदि)। यदि कोई ज्ञात पैटर्न नहीं मिल सकता है, तो अपने स्वयं के डिजाइनिंग को एक ग्राहक को "नहीं" बताने पर प्राथमिकता दी जाती है। ग्राहक, विशेषकर भुगतान करने वाले ग्राहक आमतौर पर सही होते हैं।
जो कोई भी दावा करता है कि पैटर्न द वे हैं, या दावा करते हैं कि पैटर्न द बैन ऑफ एक्जिस्टेंस हैं, गलत हैं। पैटर्न उपकरण हैं, जो विशिष्ट परिस्थितियों के लिए लागू होते हैं, और परिस्थितियों के आधार पर सफलता की अलग-अलग डिग्री होती है। यह एक सच्चाई है, जो इस बात पर निर्भर नहीं करता है कि आपने एमवीसी को चुना है या नहीं, यदि आप डेटा ट्रांसफर ऑब्जेक्ट्स का उपयोग करते हैं, या नहीं, आदि। क्या चीजें एक उचित समय सीमा में कोड को लागू कर रही हैं, जो उपयोगकर्ताओं के लिए यथोचित प्रदर्शन करता है, और तार्किक रूप से बग्स से मुक्त है।
आमतौर पर , पैटर्न एक सुसंगत रूप डिजाइन की अनुमति देगा, और 100% मूल विचारों को लिखने के पक्ष में सभी पैटर्नों की अनदेखी करने से बेहतर प्रदर्शन करेगा, लेकिन आप सभी पैटर्न से बच नहीं सकते। उदाहरण के लिए, यदि y = x + 5, तो क्या आप वास्तव में y = x + (5 * 3 + 15/3) / 4 लिखने जा रहे हैं, बस x + 5 लिखने के पैटर्न से बचें? नहीं आप नहीं हैं। आप y = x + 5 लिखने जा रहे हैं, और अगली समस्या के लिए आगे बढ़ते हैं।
लोग हर दिन पैटर्न का उपयोग करते हैं, और यह ठीक है । जो सबसे अधिक महत्वपूर्ण है, वह कोड है जो तार्किक रूप से कार्यात्मक है, शायद ही कभी क्रैश होता है, और उपयोगकर्ता के अनुकूल है। इससे ज्यादा कुछ और मायने नहीं रखता।