मैं एक कक्षा बनाना चाहता हूं जो चार एल्गोरिदम में से एक का उपयोग कर सकती है (और उपयोग करने के लिए एल्गोरिदम केवल रन-टाइम पर जाना जाता है)। मैं सोच रहा था कि रणनीति डिजाइन पैटर्न उपयुक्त लगता है, लेकिन मेरी समस्या यह है कि प्रत्येक एल्गोरिदम को थोड़ा अलग पैरामीटर की आवश्यकता होती है। क्या यह रणनीति का उपयोग करने के लिए एक बुरा डिजाइन होगा, लेकिन रचनाकार में प्रासंगिक पैरामीटर में पास?कौन सा डिजाइन पैटर्न सबसे उपयुक्त है?
यहाँ एक उदाहरण (सादगी के लिए, मान लें कि केवल दो संभव एल्गोरिदम देखते हैं चलो)
class Foo
{
private:
// At run-time the correct algorithm is used, e.g. a = new Algorithm1(1);
AlgorithmInterface* a;
};
class AlgorithmInterface
{
public:
virtual void DoSomething() = 0;
};
class Algorithm1 : public AlgorithmInterface
{
public:
Algorithm1(int i) : value(i) {}
virtual void DoSomething(){ // Does something with int value };
int value;
};
class Algorithm2 : public AlgorithmInterface
{
public:
Algorithm2(bool b) : value(b) {}
virtual void DoSomething(){ // Do something with bool value };
bool value;
};
कुछ पूर्व निर्धारित पैटर्न में अपने कोड को फिट करने की कोशिश करने के बजाय, बस इसे डिजाइन करें जो आपके लिए सबसे स्पष्ट है (और उम्मीद है कि हर किसी के लिए स्पष्ट हो) और बनाए रखने के लिए सबसे आसान है। दूसरे शब्दों में: डिजाइन पैटर्न चूसना। यदि * आपको * किसी समस्या को हल करने का एक शानदार तरीका मिल गया है, तो इसका उपयोग करें; चाहे वह कुछ मनमाने ढंग से डिजाइन पैटर्न का उल्लंघन करता है या नहीं, यह असंभव है। – GManNickG
इसके अलावा, अगर आप हमें कुछ और देते हैं (ये पैरामीटर कैसे पास किए जा रहे हैं, आदि) हम आपको एक बेहतर उत्तर दे सकते हैं। लेकिन जैसा लगता है, मेरे लिए एक अच्छा समाधान दिखता है। – GManNickG