फ़ैक्टरी पैटर्न प्रचलन "सी-स्टाइल" भाषाओं (सी / सी ++, सी #, जावा) में कोडर्स के बीच एक लगभग-डोगमैटिक विश्वास से उपजा है कि "नया" कीवर्ड का उपयोग बुरा है, और हर कीमत (या) से बचा जाना चाहिए कम से कम केंद्रीकृत)। यह, बदले में, सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल (एसओएलआईडी के "एस") की अल्ट्रा-सख्त व्याख्या से आता है, और डिपेंडेंसी इन्वर्सेशन प्रिंसिपल ("डी") का भी। बस कहा गया है, एसआरपी कहता है कि आदर्श रूप से एक कोड ऑब्जेक्ट में एक "बदलने का कारण" होना चाहिए, और केवल एक; उस "कारण को बदलने" का उद्देश्य उस वस्तु का केंद्रीय उद्देश्य है, कोडबेस में इसकी "जिम्मेदारी", और कुछ और जो कोड में बदलाव की आवश्यकता है, उस वर्ग फ़ाइल को खोलने की आवश्यकता नहीं होनी चाहिए। डीआईपी और भी सरल है; एक कोड ऑब्जेक्ट को किसी अन्य ठोस वस्तु पर कभी भी निर्भर नहीं होना चाहिए,
बिंदु में, "नया" और एक सार्वजनिक निर्माणकर्ता का उपयोग करके, आप कॉलिंग कोड को एक विशिष्ट कंक्रीट क्लास के एक विशिष्ट निर्माण विधि से जोड़ रहे हैं। आपके कोड को अब यह जानना होगा कि एक वर्ग MyFooObject मौजूद है, और एक निर्माणकर्ता है जो एक स्ट्रिंग और एक इंट लेता है। यदि उस कंस्ट्रक्टर को कभी भी अधिक जानकारी की आवश्यकता होती है, तो कंस्ट्रक्टर के सभी उपयोगों को उस जानकारी में पास करने के लिए अपडेट किया जाना चाहिए, जिसमें आप अभी लिख रहे हैं, और इसलिए उन्हें पास होने के लिए कुछ वैध होना आवश्यक है, और इसलिए उन्हें या तो होना चाहिए इसे प्राप्त करने के लिए इसे बदला जा सकता है (खपत वस्तुओं में अधिक जिम्मेदारियों को जोड़ते हुए)। इसके अलावा, अगर MyFooObject को कभी भी BetterFooObject द्वारा कोडबेस में बदल दिया जाता है, तो पुराने वर्ग के सभी उपयोगों को पुराने के बजाय नई वस्तु के निर्माण के लिए बदलना होगा।
इसलिए, इसके बजाय, MyFooObject के सभी उपभोक्ताओं को सीधे "IFooObject" पर निर्भर होना चाहिए, जो MyFooObject सहित कक्षाओं को लागू करने के व्यवहार को परिभाषित करता है। अब, IFooObjects के उपभोक्ता केवल एक IFooObject का निर्माण नहीं कर सकते हैं (यह जानकर बिना कि एक विशेष ठोस वर्ग एक IFooObject है, जिसकी उन्हें आवश्यकता नहीं है), इसलिए इसके बजाय उन्हें एक IFooObject- कार्यान्वयन वर्ग या विधि का उदाहरण दिया जाना चाहिए। बाहर से, एक अन्य वस्तु से, यह जानने की ज़िम्मेदारी है कि परिस्थिति के लिए सही IFooObject कैसे बनाया जाए, जो कि हमारे प्रतिमान में आमतौर पर एक कारखाने के रूप में जाना जाता है।
अब, यहाँ जहाँ सिद्धांत वास्तविकता से मिलता है; एक वस्तु को हर समय सभी प्रकार के परिवर्तन के लिए बंद नहीं किया जा सकता है। बिंदु में मामला, IFooObject अब कोडबेस में एक अतिरिक्त कोड ऑब्जेक्ट है, जिसे उपभोक्ताओं द्वारा आवश्यक इंटरफ़ेस या IFooObjects के कार्यान्वयन में जब भी परिवर्तन होता है, बदलना होगा। यह इस अमूर्तता में एक दूसरे के साथ बातचीत करने के तरीके को बदलने में शामिल जटिलता के एक नए स्तर का परिचय देता है। इसके अलावा, उपभोक्ताओं को अभी भी बदलना होगा, और अधिक गहराई से, अगर इंटरफ़ेस खुद को एक नए द्वारा बदल दिया जाता है।
एक अच्छा कोडर जानता है कि कैसे SOLAG के साथ YAGNI ("यू ऐन गॉन नीड इट") को संतुलित करने के लिए, डिजाइन का विश्लेषण करके और उन स्थानों को ढूंढना है जो किसी विशेष तरीके से बदलने की संभावना रखते हैं, और उन्हें अधिक सहिष्णु होने के लिए फिर से तैयार कर रहे हैं। परिवर्तन के प्रकार, क्योंकि उस मामले में "आप कर रहे हैं वाला यह की जरूरत है"।