मेरे पास किसी के साथ रणनीति पैटर्न वास्तव में क्या है और इस मामले को सुलझाने के लिए एक विशेषज्ञ की आवश्यकता है।रणनीति डिजाइन पैटर्न की सटीक परिभाषा क्या है?
हम दोनों सहमत हैं कि रणनीति पैटर्न एक ही इंटरफेस को बनाए रखते हुए रनटाइम पर एक वर्ग (उदा। व्यवहार) को बदलने के लिए अनुमति देता है। हालांकि, उनकी विवाद यह है कि "[एल्गोरिदम] के लिए एक रणनीति होने के लिए, आपको एक ही परिणाम प्राप्त करना होगा"। मेरी विवाद यह है कि एक वर्ग के "एल्गोरिदम" या तर्क को स्वैप करने का अर्थ यह हो सकता है कि ओवरराइड ऑपरेशन के परिणाम अलग हैं, लेकिन यह अभी भी रणनीति पैटर्न के उद्देश्य, उद्देश्य (और वर्गीकरण) को पूरा करता है।
टिप्पणी के साथ उसका कोड उदाहरण:
अपने परिभाषा के अनुसार, एक वर्ग के किसी भी उपवर्गों एक रणनीति होगी। उनके पास एक ही विधि परिभाषाएं (हस्ताक्षर) हैं, और इसलिए अदला-बदली हैं।
Interface Strategy
{
DoArithmatic(int[] a)
}
Class A : Strategy
public int DoArithmatic(int[]a)
{
int temp = 0;
for(int i =0; i< a.length; i++)
temp += a[i]
}
Class B : Strategy
public int DoArithmaticB(int[]a)
{
int temp = 0;
for(int i =a.length -1; i>-1; i--)
temp += a[i]
}
Class C : Strategy
public int DoArithmatic(int[]a)
{
int temp = 0;
for(int i =0; i< a.length; i++)
temp -= a;
}
int[] a = { 1,2,3 }
ClassA.DoArithmatic(a) = 6
ClassB.DoArithmatic(a) = 6
ClassC.DoArithmatic(a) = -6//This one is not interchangeable
पहले दो रणनीतियों हैं। क्योंकि किसी भी इनपुट के लिए वे आपको एक ही जवाब देंगे। आखिरी वाला नहीं है। सिर्फ इसलिए कि यह आपको एक int देता है यह एक रणनीति नहीं बनाता है। उन्हें एक ही चीज़ "करना" है।
आप उन्हें एक रणनीति बनाने के लिए "उच्च" अमूर्त अवधि का उपयोग नहीं कर सकते हैं।
ये सभी "MATH" करते हैं लेकिन वे सभी एक ही तरीके से "समान" चीज़ नहीं कर रहे हैं। यह एक रणनीति का सार है।
तो, कौन सही है?
यह एल्गोरिदम भिन्न होता है, लेकिन क्या यह उनके परिणाम को अलग-अलग करने देता है? यानी: यह कार्यान्वयन को अलग-अलग करने देता है, लेकिन इंटरफ़ेस के बारे में क्या? सवाल यही है। –
?? सवाल विशेष रूप से कहा गया है "हम दोनों सहमत हैं कि रणनीति पैटर्न एक ही इंटरफ़ेस को बनाए रखने के दौरान एक वर्ग (उदाहरण के लिए, व्यवहार) को रनटाइम पर बदल दिया जा सकता है" –
"ग्राहकों से स्वतंत्र रूप से भिन्न होता है" ठीक है, लेकिन वे कैसे करते हैं एक दूसरे के बीच भिन्नता (रणनीति बनाम रणनीति)? यही तो प्रश्न है। – eljenso