ठीक तो मैं एक कुछ कोड है जो इस तरह मोटे तौर पर लग रहा है देख रहा हूँ:एक डिजाइन पैटर्न के लिए खोज रहे huuuge को बदलने के लिए करता है, तो पर वस्तु प्रकार
void DoSomething(object o)
{
if (o is Sometype1) {
//cast o to Sometype and do something to it
}
else if (o is Sometype2) {
//cast o to Sometype2 and do something to it
}
...
else if (o is SometypeN) {
//cast o to SometypeN and do something to it
}
}
अब एक दृष्टिकोण सभी वस्तुओं o
हैं कि बनाने के लिए किया जाएगा कुछ विधि करने के वास्तव में उन लोगों के साथ संबंधित नहीं है के लिए तर्क - मानकों की तरह
interface ICanHaveSomethingDoneToMe
{
//expose various properties that the DoSomething method wants to access
}
एक इंटरफ़ेस को लागू के रूप में लेकिन इस के साथ समस्या यह है कि मैं अपने सभी वस्तुओं को इस इंटरफ़ेस को लागू नहीं करना चाहती है इस्तेमाल किया। इस से निपटने के लिए मुझे किस पैटर्न का उपयोग करना चाहिए?
मैं
interface IPropertiesForDoingSomethingTo<T>
{
//expose various properties that the DoSomething method wants to access
}
के कार्यान्वयन की एक श्रृंखला की तरह कुछ संदेह है बेहतर हो सकता है। मेरे पास प्रत्येक ऑब्जेक्ट प्रकार के लिए एक कार्यान्वयन होगा जिसे मैं करना चाहता हूं, लेकिन फिर मुझे यह नई समस्या है। मुझे बिंदु पर
IPropertiesForDoingSomethingTo<T> GetPropsGeneric(T t);
पर एक विधि की आवश्यकता होगी, लेकिन क्या इस पर भारी स्विच करने की आवश्यकता होगी? मैं की तरह
IPropertiesForDoingSomethingTo<Someobject1> GetProps(Someobject1 t);
...
IPropertiesForDoingSomethingTo<Someobject1> GetProps(SomeobjectN t);
तरीकों का भार के साथ एक वर्ग को परिभाषित करना चाहिए यह जेनेरिक वर्जन है कि आप क्रम में नए प्रकार जोड़ने के लिए सक्षम नहीं होगा की तुलना में समस्या है। Ts वहाँ कंटेनर को हल करने के लिए GetPropsGeneric में एक डी कंटेनर के साथ कुछ चालाक कर सकते हैं? धन्यवाद!
आप किसी भी वर्ग के चारों ओर एक रैपर लागू कर सकते हैं जिसे आप नहीं बदल सकते हैं और इसे अपने इंटरफ़ेस को कार्यान्वित कर सकते हैं। फिर केवल उन वस्तुओं से निपटें जिन्हें लपेटा गया है। मैं डेटाकॉन्टेक्स्ट के साथ ऐसा करता हूं, उदाहरण के लिए, यूनिट परीक्षण को आसान बनाना। – tvanfosson
पैरामीटर की जांच करने के लिए यदि आपके पास कोई कथन/स्विच है तो एक वस्तु बनाएं यानी फैक्टरी पैटर्न – Julio
@ फ्रैंको ऑफहैंड, मैं कहूंगा कि आप फैक्ट्री पैटर्न को गलत व्याख्या कर रहे थे; http://en.wikipedia.org/wiki/Factory_method_pattern देखें –