मुझे लगता है कि मेरा अन्य उत्तर सामान्य मामले के लिए खड़ा है, लेकिन ओपी ने विशिष्टताओं के लिए टिप्पणी की (इसलिए मुझे लगा कि यह अलग जवाब देने के योग्य है)। अफसोस की बात है कि मैं रिपॉजिटरी पैटर्न से परिचित नहीं हूं, लेकिन मैं दूसरों पर कटाक्ष करूंगा। एक नियम के रूप में, मुझे लगता है कि यह समझाने का सबसे अच्छा तरीका है कि आप किस समस्या को हल करना चाहते हैं, आप इसे क्यों हल करना चाहते हैं और समस्या इसे कैसे पूरा करती है।
एकाकी वस्तु
इस पैटर्न का उपयोग तब किया जाता है जब हम इस बात की गारंटी देना चाहते हैं कि किसी एक चीज की ही जरूरत है। दूसरों को हमारी वस्तु बनाने से रोककर पैटर्न को पूरा किया जाता है।
विकिपीडिया
MVC
इस पैटर्न का उपयोग उन सभी लाभों के साथ चीजों को मॉड्यूलर रखने में मदद करने के लिए किया जाता है जो उस के साथ आते हैं। दृश्य "उपयोगकर्ता इंटरफ़ेस" है, मॉडल डेटा है (व्यावसायिक तर्क सहित), और नियंत्रक है कि उपयोगकर्ता कार्रवाई मॉडल को कैसे हेरफेर करता है। इस प्रतिरूपकता के साथ, एक ही मॉडल के साथ काम करने के लिए कई विचार / नियंत्रक होने से मुझे कुछ भी नहीं रोकता है। अत्यधिक सरलीकृत उदाहरण के लिए, मैं अपने ईमेल ("मॉडल") को एक वेब साइट, डेस्कटॉप एप्लिकेशन और मेरे आईफोन ("विचार + नियंत्रक") के माध्यम से इंटर कर सकता हूं। यदि मेरे पास एक साझा समूह मेलबॉक्स है, तो मैं एक नियंत्रक बना सकता हूं जो ईमेल नहीं भेजेगा, और उसी एप्लिकेशन दृश्य और ईमेल का पुन: उपयोग करेगा। (हाँ अति सरल, लेकिन उम्मीद है कि समझ में आता है :))
इसके अतिरिक्त, चिंताओं के इस अच्छी तरह से परिभाषित पृथक्करण के साथ, एक (आदर्श) में परिवर्तन दूसरे में परिवर्तन की आवश्यकता नहीं है। ठोस उदाहरण, अगर मुझे ओरेकल डेटाबेस के बजाय MySQL डेटाबेस को पढ़ने / लिखने का समर्थन करने की आवश्यकता है, तो मुझे केवल अपना मॉडल बदलने की आवश्यकता होगी, और मेरा दृश्य / नियंत्रक नहीं बदलता है।
विकिपीडिया
फ़ैक्टरी
यहाँ सावधान रहना होगा क्योंकि फैक्ट्री नामक कई समान पैटर्न हैं ... मैं एब्सट्रैक्ट फ़ैक्टरी के बारे में बात करूँगा , लेकिन आपको पता होना चाहिए कि फ़ैक्टरी विधि पैटर्न भी है।
असल में, मैं एक एब्सट्रैक्ट फैक्ट्री का उपयोग करता हूँ जब मुझे पता होता है कि मैं क्या कदम उठाना चाहता हूँ, लेकिन इन इनवैलिड चरणों को कैसे पूरा किया जाए, इस पर कदम अलग-अलग हो सकते हैं। उदाहरण के लिए, मैं एक एप्लिकेशन का निर्माण कर सकता हूं जहां मुझे उस पर एक बटन के साथ एक संवाद बॉक्स बनाने की आवश्यकता है। मेरे कोड का उपयोग करके एक काल्पनिक UI फैक्ट्री का उपयोग किया जाता है, अगर मुझे विंडोज़ के बजाय मैक या लिनक्स पर अपने कोड की आवश्यकता होती है, तो मैं बस एक अलग फैक्ट्री प्रदान करता हूं, और मेरा बाकी कोड नहीं बदलता है। संभावित संभावित जंगल उदाहरण के लिए, मेरे पास एक वेब फैक्ट्री हो सकती है और अचानक मेरे डेस्कटॉप एप्लिकेशन के अधिकांश कोड अब एक समृद्ध वेबसाइट को भी पावर दे रहे हैं :) (अन्य कारणों से ठीक अव्यावहारिक, लेकिन सिद्धांत रूप में :))