क्या सी # फैक्टरी पैटर्न को अपस्टास्ट की आवश्यकता है?सी # फैक्टरी - एक उथल-पुथल है?
मैं कक्षा पुस्तकालय में ईश्वर चाहता हूं जी कक्षा पुस्तकालय में एडम बनाने के लिए ए पर निर्भर करता है ए। ई पर निर्भर करता है ई भगवान कक्षा पुस्तकालय ई में ईव द्वारा खपत के लिए एडम्स का उत्पादन करता है, और यह हव्वा को एडम पर जानना और निर्भर होना ठीक है। (संपादित करें - इस नमूने को बेहतर और बेहतर होता जाता है :)
समाधान मैं के ए में एक AdamFactory इस तरह AdamFactory एडम जानता है और आसानी से बस एडम निर्माता बुला) द्वारा यह बना सकते हैं (संभवतः रहा है सोच सकता है। भगवान को एडम फैक्ट्री प्राप्त होती है और इसे एडैम बनाने के लिए ऑर्डर कर सकती है।
अब, क्योंकि भगवान को एडम को जानने की अनुमति नहीं है, एडमफैकोटरी के CreateAdam को एक वस्तु वापस करनी होगी, और इसके लिए हव्वा को एडम को आर्टफैक्टरी द्वारा लौटाई गई ऑब्जेक्ट को अप-कलाकार करने की आवश्यकता है।
यह काम करेगा, मुझे लगता है। हालांकि, मैं अप-कास्टिंग के बारे में असहज महसूस करता हूं क्योंकि यह नो-नो है। क्या यह वास्तव में एक जरूरी है?
पीएस - कोई निंदा करने का इरादा नहीं है, और अगर किसी की भावनाओं को चोट पहुंची तो मैं क्षमा चाहता हूं। यह सृष्टिकर्ता के बजाय भगवान और आदम का उपयोग करना बेहतर लग रहा था और बनाया गया क्योंकि दो बाद वाले शब्द एक-दूसरे के समान हैं।
संपादित करें: पुन: इंटरफेस सुझाव। आइए मान लें कि एडम के दो तरीके हैं: ProvideLove, ProvideFood और ProvideProtection (हम इस नमूना को सुरक्षित रखते हैं :)। हव्वा इन दो उद्देश्यों के लिए आदम का उपयोग करता है, लेकिन निश्चित रूप से भगवान नहीं करता है। तो भगवान को ज्ञान के साथ क्यों प्रदान करें कि एडमफैक्टर कुछ ऐसा करता है जो आईएडएम लागू करता है न केवल एक वस्तु? मुझे यह नहीं मिला!
संपादित करें: काम कर कोड (समान पुस्तकालय में हर कोई है, जो मेरा लक्ष्य विभिन्न पुस्तकालयों के लिए अलग करने के लिए है के साथ) इस तरह दिखता है:
Adam God.LoadAdam(AdamID theAdamID)
var adam = new Adam(theAdamId, this)
Adam.Adam(AdamID theAdamID, God theGod)
_god = theGod
_mind = theGod.LoadMind(theAdamId, this)
Mind God.LoadMind (AdamID theAdamID, Adam theAdam)
var mind = new Mind (theAdam)
var mindId = new minId(theAdamId)
mind.DeserializeFromFile(minId)
Mind.Mind (Adam theAdam)
_adam = theAdam
मेरा मानना है कि आप एक आदम को लौटाए गए ऑब्जेक्ट को * डाउनकास्ट * करना चाहते हैं। –
मैं पहले जवाब में बताए गए इंटरफेस के लिए जाऊंगा। वैसे भी, अच्छे प्रश्न के लिए +1, बहुत मजाकिया :-) – Shimrod
अंत तक इसे पढ़ने से पहले भी नमूना के लिए सवाल उठाया। :) – Stilgar