2011-03-22 32 views
5

रीफैक्टरिंग करते समय बहुरूपता पर रणनीति चुनने के लिए जब आप मुझे पॉलिमॉर्फ़िम पर स्ट्रेटर्जी चुनने के लिए विशिष्ट कारण दे सकते हैं और इसके विपरीत।स्विच स्टेटमेंट

बहुत बहुत धन्यवाद!

उत्तर

4

एक मानदंड यह महत्वपूर्ण है कि क्या पॉलिमॉर्फिज्म युग्मन पैदा करेगा कि रणनीति से बचें। उदाहरण के लिए, यदि कक्षाओं के पेड़ के लिए "सेव()" विधि को कम-स्तर I/O फ़ंक्शंस का उपयोग करना है, तो यदि आप बहुरूपता का उपयोग करते हैं, तो कक्षाओं का पेड़ I/O सिस्टम के साथ मिल जाएगा जबकि यह ' पहले टी यदि आप रणनीति पैटर्न का उपयोग करते हैं, तो रणनीति वस्तुएं "बफर" के रूप में कार्य करेंगी और कक्षाओं के पेड़ को I/O के आधार पर रखेगी।

1

आप अपना आवेदन शून्य से शुरू करते हैं।

अगला चरण पॉलीमोर्फिज्म के साथ कच्चा कोड है।

बुनियादी मामलों के साथ यह इस तरह से रह सकता है - यह कोई समस्या नहीं है।

यदि आप चाहते हैं कि आपका आवेदन अधिक लचीला हो, परिवर्तन के लिए तैयार हो और आप इसे विकसित करना जारी रखने की योजना बना रहे हों - अब कुछ डिज़ाइन-पैटर्न की तलाश करने का समय है, रणनीति उन लोगों में से एक है जो आपको सोचना चाहिए, जब बहुरूपता दे रही है कुछ परेशानी रणनीति के


आशय:

, एल्गोरिदम के एक परिवार को परिभाषित करें हर एक संपुटित, और उन्हें विनिमेय बनाते हैं। रणनीति एल्गोरिदम का उपयोग करने वाले ग्राहकों से स्वतंत्र रूप से भिन्न होती है।


प्रेरणा रणनीति का उपयोग करें:

कई एल्गोरिदम में पाठ की एक धारा को तोड़ने के लिए मौजूद हैं वर्गों है कि उन्हें आवश्यकता होती है में इस तरह के सभी एल्गोरिदम lines.Hard तारों कई कारणों के लिए वांछनीय नहीं है :

· जिन ग्राहकों को लाइन ब्रेकिंग की आवश्यकता होती है उन्हें अधिक जटिल हो जाता है यदि वे लाइन ब्रेकिंग कोड शामिल करते हैं। इससे ग्राहकों को बनाए रखने के लिए बड़ा और कठिन बनाता है, विशेष रूप से यदि वे एकाधिक लाइन ब्रेकिंग एल्गोरिदम का समर्थन करते हैं।

· विभिन्न अल्गोरिदम अलग-अलग समय पर उपयुक्त होंगे। यदि हम उन सभी का उपयोग नहीं करते हैं तो हम एकाधिक लाइन ब्रेकिंग एल्गोरिदम का समर्थन करने के लिए नहीं चाहते हैं।

· नए एल्गोरिदम जोड़ना मुश्किल है और लाइन ब्रेकिंग क्लाइंट का एक अभिन्न अंग है। हम अलग-अलग लाइन ब्रेकिंग एल्गोरिदम को अलग करने वाले वर्गों को परिभाषित करके इन समस्याओं से बच सकते हैं। एक एल्गोरिदम जो इस तरह से encapsulated है एक रणनीति कहा जाता है।


परिणाम:

  1. रणनीति वर्गों में से संबंधित algorithms.Hierarchies के परिवार संदर्भों पुन: उपयोग करने के लिए एल्गोरिदम या व्यवहार की एक परिवार परिभाषित करते हैं। विरासत एल्गोरिदम की सामान्य कार्यक्षमता को कारक बनाने में मदद कर सकती है।

  2. उपclassing के लिए एक विकल्प। विरासत विभिन्न प्रकार के एल्गोरिदम या व्यवहार का समर्थन करने का एक और तरीका प्रदान करता है। आप इसे अलग-अलग व्यवहार देने के लिए सीधे एक संदर्भ वर्ग उप-वर्ग कर सकते हैं। लेकिन यह कन्टेक्स्ट में व्यवहार व्यवहार करता है। यह संदर्भ के साथ एल्गोरिदम कार्यान्वयन को मिश्रित करता है, संदर्भ को समझने, बनाए रखने और विस्तार करने के लिए कड़ी मेहनत करता है। और आप गतिशील रूप से एल्गोरिदम भिन्न नहीं हो सकते हैं। आप कई संबंधित वर्गों के साथ हवाएं करते हैं जिनके केवल अंतर उनके द्वारा नियोजित एल्गोरिदम या व्यवहार है। विभिन्न रणनीति वर्गों में एल्गोरिदम को एन्कुलुलटिंग करने से आप एल्गोरिदम को अपने संदर्भ के स्वतंत्र रूप से बदल सकते हैं, जिससे स्विच करना, समझना और विस्तार करना आसान हो जाता है।

  3. रणनीतियां सशर्त बयान को खत्म करती हैं। रणनीति पैटर्न वांछित व्यवहार का चयन करने के लिए सशर्त बयान के विकल्प प्रदान करता है। जब एक वर्ग में अलग-अलग व्यवहार लुप्त हो जाते हैं, तो सही व्यवहार का चयन करने के लिए सशर्त बयान का उपयोग करना मुश्किल है। विभिन्न रणनीति वर्गों में व्यवहार को अपनाने से इन सशर्त कथन समाप्त हो जाते हैं।

संबंधित मुद्दे