Diğer cevabımın genel durum için geçerli olduğunu hissediyorum, ancak OP ayrıntılar sorarak yorumladı (bu yüzden ayrı bir cevabı hak ettiğini hissettim). Ne yazık ki Depo desenine aşina değilim, ama diğerlerine bir bıçakla bakacağım. Kural olarak, bunları açıklamanın en iyi yolu, hangi sorunu çözmek istediğiniz, neden çözmek istediğiniz ve sorunun nasıl başardığıdır.
Singleton
Bu desen, bir şeyden sadece birinin olduğunu garanti etmek istediğimizde kullanılır. Desen, başkalarının bizim neslimizi yaratmasını engelleyerek gerçekleştirilir.
Vikipedi
MVC
Bu model, bununla birlikte gelen tüm avantajlarla şeyleri modüler tutmaya yardımcı olmak için kullanılır. Görünüm "kullanıcı arabirimi", Model verilerdir (iş mantığı dahil) ve Denetleyici kullanıcı eylemlerinin modeli nasıl işlediğidir. Bu modülerlikle, hiçbir şey aynı modelle çalışmak için birden fazla görünüm / denetleyiciye sahip olmamı engellemiyor. Aşırı basitleştirilmiş bir örnek için, bir web sitesi, masaüstü uygulaması ve iPhone'um ("görünümler + denetleyiciler") aracılığıyla e-postalarımla ("model") etkileşim kurabilirim. Paylaşılan bir grup posta kutum varsa, e-posta göndermeyen bir denetleyici oluşturabilir ve aynı uygulama görünümünü ve e-postasını yeniden kullanabilirim. (evet aşırı basit, ama umarım anlaşılabilir :))
Ek olarak, bu iyi tanımlanmış kaygı ayrımı ile, birindeki (ideal olarak) değişiklikler diğerinde değişiklik gerektirmez. Somut örnek, bir Oracle veritabanı yerine bir MySQL veritabanına okuma / yazmayı desteklemem gerekirse, sadece modelimi değiştirmeniz gerekir ve görünümüm / denetleyicim değişmez.
Vikipedi
Fabrika
Fabrika olarak adlandırılan birçok benzer desen olduğu için burada dikkatli olmalısın ... Soyut Fabrika hakkında konuşacağım , ancak aynı zamanda bir Fabrika Metodu deseni olduğunu da bilmelisiniz .
Temel olarak, hangi adımları uygulamak istediğimi bildiğimde bir Soyut Fabrika kullanırdım, ancak bu bireysel adımların nasıl gerçekleştirileceğine ilişkin adımlar değişebilir. Örneğin, üzerinde bir düğme olan bir iletişim kutusu oluşturmam gereken bir uygulama oluşturabilirim. Kodumun varsayımsal bir UI fabrikası kullanmasını sağlayarak, kodumu Windows yerine Mac veya Linux'a ihtiyacım varsa, sadece farklı bir fabrika sağlarım ve kodumun geri kalanı değişmez. Bir potansiyel olarak daha vahşi bir örnek için, bir Web Fabrikası olabilir ve aniden masaüstü uygulamamı destekleyen kodun çoğu şimdi de zengin bir web sitesine güç veriyor :) (diğer nedenlerle pratik değil, ancak teoride :))