आप एक रिफैक्टरिंग का उपयोग करना चाहते हैं जो एक पॉलिमॉर्फिक कक्षा का उपयोग करके सशर्त को बदल देता है। example के लिए।
या यहाँ एक और example
अनिवार्य रूप से आदर्श आप एक वस्तु पदानुक्रम बनाते हैं, और एक ओवरराइड विधि में विभिन्न व्यवहारों के लिए कदम बहुत सरल है है। आपको अभी भी सही वर्ग बनाने के लिए एक विधि की आवश्यकता होगी लेकिन यह कारखाने के पैटर्न का उपयोग करके किया जा सकता है।
संपादित
मुझे जोड़ने कि इस हर मामले में एक आदर्श समाधान नहीं है करते हैं। जैसा कि (मैं आपका नाम क्षमा चाहता हूं) मेरी टिप्पणियों में इंगित किया गया है, कुछ बार यह दर्द हो सकता है, खासकर यदि आपको ऐसा करने के लिए ऑब्जेक्ट मॉडल बनाना है। यह रिफैक्टरिंग excells आप इस अगर:
function doWork(object x)
{
if (x is a type of Apple)
{
x.Eat();
} else if (x is a type of Orange)
{
x.Peel();
x.Eat();
}
}
यहाँ आप कुछ नया तरीका है कि प्रत्येक फल संभाल लेंगे में स्विच refactor कर सकते हैं।
संपादित
के रूप में किसी को बताया कि कैसे आप doWork में जाने के लिए सही प्रकार बना सकता हूँ, वहाँ इस समस्या को हल करने के लिए तो मैं probally तो कुछ मूलभूत तरीकों सूचीबद्ध कर सकते हैं और अधिक तरीके हैं।
class FruitFactory
{
Fruit GetMeMoreFruit(typeOfFruit)
{
switch (typeOfFruit)
...
...
}
}
इस विधि की अच्छी बात यह लिखने के लिए आसान है, और आमतौर पर पहली विधि मैं उपयोग करते हैं: पहली और सबसे सीधे आगे (और हाँ इस सवाल का अनाज के खिलाफ जाता है) एक स्विच है। जबकि आपके पास अभी भी एक स्विच स्टेटमेंट है जो कोड के एक क्षेत्र से अलग है और यह बहुत ही बुनियादी है, यह सब एक रिटर्न है। यदि आपके पास केवल कुछ वस्तुएं हैं और वे; यह काम बहुत अच्छी तरह से नहीं बदल रहे हैं।
अन्य अधिक कॉम्पेक्स पैटर्न जो आप देख सकते हैं वह Abstract Factory है। यदि आपका मंच इसका समर्थन करता है तो आप गतिशील रूप से फल भी बना सकते हैं। आप Provider Pattern जैसे कुछ भी उपयोग कर सकते हैं। जो अनिवार्य रूप से मेरे लिए है, इसका मतलब है कि आप अपनी वस्तु को कॉन्फ़िगर करते हैं और फिर आपके पास एक कारखाना है जो कॉन्फ़िगरेशन पर आधारित होता है और एक कुंजी जो आप फैक्ट्री देते हैं, वह गतिशील रूप से सही कक्षा बनाती है।
क्या आप एक उदाहरण दे सकते हैं? – Apocalisp