Mode pola pabrik berasal dari keyakinan yang hampir dogmatis di antara coders dalam bahasa "C-style" (C / C ++, C #, Java) yang menggunakan kata kunci "baru" itu buruk, dan harus dihindari dengan segala cara (atau paling tidak tersentralisasi). Ini, pada gilirannya, berasal dari interpretasi yang sangat ketat dari Prinsip Tanggung Jawab Tunggal ("S" SOLID), dan juga dari Prinsip Inversi Ketergantungan ("D"). Secara sederhana, SRP mengatakan bahwa idealnya objek kode harus memiliki satu "alasan untuk berubah", dan hanya satu; bahwa "alasan untuk berubah" adalah tujuan utama dari objek itu, "tanggung jawabnya" dalam basis kode, dan hal lain apa pun yang memerlukan perubahan kode tidak boleh mengharuskan membuka file kelas itu. DIP bahkan lebih sederhana; objek kode tidak boleh bergantung pada objek konkret lain,
Contoh kasus, dengan menggunakan "baru" dan konstruktor publik, Anda menggabungkan kode panggilan ke metode konstruksi spesifik dari kelas beton tertentu. Kode Anda sekarang harus tahu bahwa kelas MyFooObject ada, dan memiliki konstruktor yang mengambil string dan int. Jika konstruktor itu membutuhkan lebih banyak informasi, semua penggunaan konstruktor harus diperbarui untuk memasukkan informasi itu termasuk yang sedang Anda tulis sekarang, dan oleh karena itu mereka diharuskan memiliki sesuatu yang valid untuk diteruskan, sehingga mereka harus memiliki atau diubah untuk mendapatkannya (menambahkan lebih banyak tanggung jawab ke objek yang mengkonsumsi). Selain itu, jika MyFooObject pernah diganti dalam basis kode oleh BetterFooObject, semua penggunaan kelas lama harus berubah untuk membangun objek baru, bukan yang lama.
Jadi, sebagai gantinya, semua konsumen MyFooObject harus langsung bergantung pada "IFooObject", yang mendefinisikan perilaku menerapkan kelas termasuk MyFooObject. Sekarang, konsumen IFooObjects tidak bisa hanya membangun IFooObject (tanpa memiliki pengetahuan bahwa kelas beton tertentu adalah IFooObject, yang tidak mereka butuhkan), jadi mereka harus diberi contoh kelas atau metode yang mengimplementasikan IFooObject dari luar, oleh objek lain yang memiliki tanggung jawab untuk mengetahui cara membuat objek IFooOb yang benar untuk keadaan tersebut, yang dalam bahasa kita biasanya dikenal sebagai Pabrik.
Sekarang, di sinilah teori bertemu kenyataan; suatu objek tidak pernah bisa ditutup untuk semua jenis perubahan sepanjang waktu. Contoh kasus, IFooObject sekarang menjadi objek kode tambahan dalam basis kode, yang harus berubah setiap kali antarmuka yang dibutuhkan oleh konsumen atau implementasi perubahan IFooObjects. Itu memperkenalkan tingkat kompleksitas baru yang terlibat dalam mengubah cara objek berinteraksi satu sama lain dalam abstraksi ini. Selain itu, konsumen masih harus berubah, dan lebih dalam lagi, jika antarmuka itu sendiri digantikan oleh yang baru.
Seorang programmer yang baik tahu bagaimana menyeimbangkan YAGNI ("Kamu Tidak Akan Membutuhkannya") dengan SOLID, dengan menganalisis desain dan menemukan tempat-tempat yang sangat mungkin harus berubah dengan cara tertentu, dan refactoring mereka agar lebih toleran terhadap bahwa jenis perubahan, karena dalam kasus "Anda adalah akan membutuhkannya".