Saya merasa jawaban saya yang lain adalah untuk kasus umum, tetapi OP berkomentar meminta spesifik (jadi saya merasa itu layak mendapat jawaban yang terpisah). Sayangnya saya tidak terbiasa dengan pola Repositori, tetapi saya akan menusuk yang lain. Sebagai aturan, saya pikir cara terbaik untuk menjelaskan ini adalah melalui masalah apa yang ingin Anda selesaikan, mengapa Anda ingin menyelesaikannya dan bagaimana masalah menyelesaikannya.
Singleton
Pola ini digunakan ketika kami ingin menjamin bahwa hanya ada satu hal. Pola ini dicapai dengan mencegah orang lain membuat objek kita.
Wikipedia
MVC
Pola ini digunakan untuk membantu menjaga hal-hal modular dengan semua manfaat yang menyertainya. Tampilan adalah "antarmuka pengguna", Model adalah data (termasuk logika bisnis), dan Pengontrol adalah cara tindakan pengguna memanipulasi model. Dengan modularitas ini, tidak ada yang menghentikan saya dari memiliki banyak tampilan / pengontrol untuk bekerja dengan model yang sama. Untuk contoh yang terlalu sederhana, saya dapat berinteraksi dengan email saya ("model") melalui situs web, aplikasi desktop, dan iPhone saya ("tampilan + pengontrol"). Jika saya memiliki kotak surat grup bersama, saya bisa membuat pengontrol yang tidak akan mengirim email, dan menggunakan kembali tampilan aplikasi dan email yang sama. (ya terlalu sederhana, tapi semoga dapat dimengerti :))
Selain itu, dengan pemisahan keprihatinan yang terdefinisi dengan baik ini, perubahan pada satu (idealnya) tidak memerlukan perubahan pada lainnya. Contoh konkret, jika saya perlu mendukung membaca / menulis ke database MySQL, bukan database Oracle, saya hanya perlu mengubah model saya, dan tampilan / pengontrol saya tidak berubah.
Wikipedia
Pabrik
Harus berhati-hati di sini karena ada banyak pola serupa yang disebut Pabrik ... Saya akan berbicara tentang Pabrik Abstrak , tetapi Anda harus tahu ada juga pola Metode Pabrik .
Pada dasarnya, saya akan menggunakan Pabrik Abstrak ketika saya tahu langkah-langkah apa yang ingin saya lakukan, tetapi langkah-langkah tentang bagaimana mencapai langkah-langkah awal ini bisa bervariasi. Sebagai contoh, saya bisa membangun aplikasi di mana saya perlu membuat kotak dialog dengan tombol di atasnya. Dengan meminta kode saya menggunakan pabrik UI hipotetis, jika saya memerlukan kode saya di Mac atau Linux, bukan Windows, saya hanya menyediakan pabrik yang berbeda, dan sisa kode saya tidak berubah. Sebagai contoh yang berpotensi lebih liar, saya dapat memiliki Pabrik Web dan tiba-tiba sebagian besar kode yang mendukung aplikasi desktop saya sekarang juga memberi daya pada situs web yang kaya :) (ok tidak praktis untuk alasan lain, tetapi secara teori :))