Wydaje mi się, że moja druga odpowiedź dotyczy ogólnego przypadku, ale OP skomentował pytanie o szczegóły (więc czułem, że zasługuje na osobną odpowiedź). Niestety nie znam wzoru Repozytorium, ale spróbuję dźgnąć pozostałych. Z reguły uważam, że najlepszym sposobem na ich wyjaśnienie jest to, jaki problem chcesz rozwiązać, dlaczego chcesz go rozwiązać i jak go rozwiązać.
Singel
Ten wzór jest używany, gdy chcemy zagwarantować, że jest tylko jedno z czegoś. Wzorzec ten osiąga się, uniemożliwiając innym tworzenie naszego obiektu.
Wikipedia
MVC
Ten wzorzec służy do zachowania modułowości przy wszystkich korzyściach z tym związanych. Widok to „interfejs użytkownika”, Model to dane (w tym logika biznesowa), a Kontroler to sposób, w jaki działania użytkownika manipulują modelem. Dzięki tej modułowości nic nie powstrzymuje mnie od posiadania wielu widoków / kontrolerów do pracy z tym samym modelem. Dla zbyt uproszczonego przykładu mogę komunikować się z pocztą e-mail („model”) za pośrednictwem strony internetowej, aplikacji komputerowej i mojego iPhone'a („widoki + kontrolery”). Jeśli mam wspólną skrzynkę pocztową grupy, mógłbym utworzyć kontroler, który nie wysyłałby wiadomości e-mail, i ponownie użyć tego samego widoku aplikacji i wiadomości e-mail. (tak, zbyt uproszczone, ale mam nadzieję, że zrozumiałe :))
Dodatkowo, przy tak dobrze zdefiniowanym oddzieleniu obaw, zmiany w jednym (najlepiej) nie wymagają zmian w innym. Konkretny przykład, jeśli muszę obsługiwać odczyt / zapis do bazy danych MySQL zamiast bazy danych Oracle, musiałbym tylko zmienić mój model, a mój widok / kontroler się nie zmienia.
Wikipedia
Fabryka
Trzeba tu uważać, ponieważ istnieje wiele podobnych wzorców zwanych Fabryką ... Porozmawiam o Fabryce Abstrakcyjnej , ale powinieneś wiedzieć, że istnieje również wzór Fabrycznej Metody .
Zasadniczo skorzystałbym z fabryki abstrakcyjnej, gdy wiem, jakie kroki chcę wykonać, ale kroki, jak je wykonać, mogą się różnić. Na przykład mógłbym budować aplikację, w której muszę utworzyć okno dialogowe z przyciskiem. Ponieważ mój kod korzysta z hipotetycznej fabryki interfejsu użytkownika, jeśli potrzebuję kodu na Macu lub Linuksie zamiast Windowsa, po prostu udostępniam inną fabrykę, a reszta mojego kodu się nie zmienia. Na przykład potencjalnie bardziej szalony przykład, mógłbym mieć Fabrykę Web i nagle większość kodu tworzącego kopię zapasową mojej aplikacji komputerowej zasila teraz także bogatą stronę internetową :) (ok niepraktyczne z innych powodów, ale teoretycznie :))