सबसे अधिक इस्तेमाल किया जाने वाला डिज़ाइन पैटर्न क्या है? [बन्द है]


24

आपको लगता है कि कौन सा डिज़ाइन पैटर्न सबसे लोकप्रिय है?


दोनों, यदि संभव हो तो ...
तमारा विजसमैन

"बहुरूपता के बजाय स्विच करें"?
mlvljr

@Bigown: आपको तब जवाब को "स्वीकार" करना चाहिए जो आपको सबसे ज्यादा पसंद आया। यदि आपको कोई उत्तर पसंद नहीं है, तो कृपया एक इनाम दें।
मैकनील

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

@ सीन: मुझे पूरा यकीन है कि जे मड की बड़ी गेंद के साथ सही है। :-)
तमारा विज्समैन 22

जवाबों:


39

मुझे पूरा यकीन है कि 'द बिग बॉल ऑफ मड' सबसे आम है। दुर्भाग्य से हम सभी के लिए।
http://en.wikipedia.org/wiki/Big_ball_of_mud


सहमत हों, जब आप एक नई परियोजना शुरू करते हैं, तो सब कुछ अच्छी तरह से संरचित और प्रलेखित होता है, लेकिन जैसे-जैसे समय सीमा समाप्त होती गई, यह सब मिट्टी की एक बड़ी गेंद की तरह समाप्त होता है
आर्टुरो मोलिना

3
@ आर्टुरो - यह एक संभावित कारण है। अन्य: 1) अनुभवहीन प्रोग्रामर द्वारा शुरू किया गया छोटा प्रोजेक्ट अप्रत्याशित रूप से सफल है, और फिर यह मूल उद्देश्य से आगे बढ़ता है। 2) अनुभवहीन प्रोग्रामर की प्रवृत्ति को रखरखाव के लिए सौंपा जा रहा है, जिनके पास मूल वास्तुकला का मार्गदर्शन या समझ नहीं है, इसलिए वे बस सामान को हैक करते हैं, और यह सिस्टम युग के रूप में खराब हो जाता है। 3) टीम गलत तकनीक का उपयोग करती है, या एक नई तकनीक से वे अपरिचित होते हैं और एक नई परियोजना पर खराब तरीके से इसका उपयोग करते हैं, और यह समय सीमा से पहले craters :)
Jay

1
LOL - अगर मैं आपसे अधिक अंक जोड़ सकता था, तो मैं करूंगा। उत्कृष्ट (दुखद) अवलोकन।
luis.espinal

25

एमवीसी और इसकी विविधता निश्चित रूप से शीर्ष डिजाइन पैटर्न में से एक है।


2
मैं यह कहने जा रहा था कि ओपी का सवाल मूर्खतापूर्ण है (मुझे अभी भी विश्वास है कि यह है)। हालाँकि, आपका जवाब बहुत सही है IMO। यदि कोई एक पैटर्न (और उसके रूपांतर) है जो बहुत अधिक लगातार उपयोग किया जाता है, तो यह एक है। आपके अच्छे उत्तर के लिए +1।
luis.espinal

21

यदि आप गैंग-ऑफ-फ़ोर डिज़ाइन पैटर्न के बारे में बात कर रहे हैं, तो मुझे सिंगलटन कहना होगा । यह वास्तव में दुखद स्थिति है - लगभग जैसे कि प्रोग्रामर डिजाइन पैटर्न के जादू के बारे में सुनते हैं और फिर पहले एक के बाद रुक जाते हैं।

यदि आप वास्तु-शैली के पैटर्न (दूसरे शब्दों में, डिज़ाइन पैटर्न जो कई कक्षाओं या परतों को फैलाते हैं) के बारे में बात कर रहे हैं , तो मुझे MVC कहना होगा । कुछ अन्य लोकप्रिय रिपॉजिटरी पैटर्न और सर्विस-लोकेटर हैं


2
यह बहुत दुखद है जब आप कई लोगों को सिंगलटन को एक एंटीपार्टर्न मानते हैं!
रिचर्ड

1
@ रीचर्ड, दुखी है कि लोग इसे तब मानते हैं जब यह नहीं है, या दुखी है कि लोग इसका उपयोग तब करते हैं जब यह एक विरोधी पैटर्न होता है?
मैट ओलेनिक

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

@ रीचर्ड - यह सिंगलटन नहीं है कि इसे एक विरोधी पैटर्न माना जाता है। यह इसका दुरुपयोग उपयोग है जो एक विरोधी पैटर्न है। बहुत कम मामलों में वास्तव में सिंगलटन की मांग / आवश्यकता होती है, और कंटेनरों के साथ वातावरण में जो संसाधन ग्रैन्युलैरिटी को नियंत्रित करते हैं, वे भी आवश्यक नहीं हैं। जब आप एक आधुनिक जावा कोड बेस में एक सिंगलटन देखते हैं, उदाहरण के लिए, यह आमतौर पर एक विरोधी पैटर्न उपयोग के लिए एक लाल झंडा होता है (सिंगलटन पैटर्न पर ही नहीं।)
luis.espinal

@ जाको - मैं तुमसे अलग होता। मुझे लगता है कि समग्र, रणनीति और टेम्पलेट (और उनके कई पुनर्जन्म) अब तक, सिंगलटन की तुलना में कहीं अधिक प्रचलित हैं, खासकर जब से हम पिछले एक दशक से विरासत पर संरचनात्मक संरचना पर ध्यान केंद्रित कर रहे हैं।
luis.espinal


7

डेकोरेटर

संरचना के माध्यम से रनटाइम पर किसी ऑब्जेक्ट में कार्यक्षमता जोड़ें। मेरा व्यक्तिगत पसंदीदा।

संपादित करें: फैक्टरी भी शायद सबसे आम में से एक है।


5

मुखौटा

Twitter या SO API जैसे किसी भी अन्य इंटरफ़ेस के बारे में सोचें। यह बैक एंड स्टफ का एक गुच्छा छिपा रहा है, जो कम से कम ट्विटर्स के मामले में, बहुत ही जटिल हो सकता है।

मुझे परवाह है कि कौन सी डीबी टेबल @ apklusk के ट्वीट में संग्रहीत हैं? और यह एक तेज़ कैश है? और उस @shemnon के पास इतने कम पाठक हैं कि ट्वीट्स हमेशा स्मृति से बाहर होते हैं? यही तो फेक का जादू है।


5

रणनीति पैटर्न

यदि आपने कभी निर्भरता इंजेक्शन का उपयोग किया है, तो आपने रणनीति पैटर्न का उपयोग किया है।


टेम्पलेट और समग्र (और उनके कई रूपों और संयोजन के अलावा) की सहमति, रणनीति
luis.espinal

5

क्यों किसी ने अभी तक पुनरावृत्ति का उल्लेख नहीं किया है? विशेष रूप से सभी मानचित्रों के साथ जो जटिल डेटा संरचनाएं बनाते हैं ... इसका उपयोग मैं सबसे अधिक करता हूं। या हम उन पैटर्न के बारे में बात कर रहे हैं जिन्हें हम फिर से लागू करते हैं?


3

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


3

अपने पिछले उत्तर के साथ, मैं एक नया जोड़ने जा रहा हूं जिसे मैं विरासत में दिए गए प्रोजेक्ट के अपने जानवर से आज चला रहा हूं:

कॉपी पेस्ट

डिबगिंग के दौरान मैं कोड के एक भाग में 2 समान नाम वाले कार्यों को बुलाता था:

if(x)
   Func1
else
   Func2

Func1 और Func2 के एक ही पैरामीटर थे। मैंने उन्हें बाहर निकाला और अलग किया, और वे Func1 कॉल Func3 और Func2 कॉल Func4 को छोड़कर 100% समान हैं। मैंने उन लोगों को बाहर निकाला और उन्हें अलग किया। 100% समान, 1 लाइन को छोड़कर। इसलिए पिछले प्रोग्रामर ने फ्लैग पैरामीटर को जोड़ने के बजाय दो निजी कार्यों को 1 स्थान पर उपयोग करने के लिए दो 50-लाइन-नेस्टेड फ़ंक्शन को कॉपी और पेस्ट करने का निर्णय लिया। इससे मुझे रोने की इच्छा होती है।


2

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


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

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

केवल समय मैंने कभी देखा है इसके लिए डेटाबेस कनेक्शन की आवश्यकता है। कहा कि, इस परियोजना में लगभग हर "सेवा" (पढ़ें: कारखाने के समान) वर्ग एक एकल है, जो PHP $_SESSIONचर में संग्रहीत है ।
Tarka


1

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




0

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.