2011-11-25 15 views
9

कभी-कभी रणनीति पैटर्न का उपयोग करते समय मुझे लगता है कि कुछ एल्गोरिदम कार्यान्वयन को समान पैरामीटर सूची की आवश्यकता नहीं है।रणनीति पैटर्न में पैरामीटर पैरामीटर

उदाहरण

public interface Strategy{ 
    public void algorithm(int num); 
    } 

    public class StrategyImpl1 implements Strategy{ 
    public void algorithm(int num){ 
     //num is needed in this implementation to run algorithm 
    } 
    } 

    public class StrategyImpl2 implements Strategy{ 
    public void algorithm(int num){ 
     //num is not needed in this implementation to run algorithm but because im using same 
     strategy interface I need to pass in parameter 
    } 

} 

के लिए वहाँ एक अलग डिजाइन पैटर्न का उपयोग करना चाहिए है?

उत्तर

9

यह आम तौर पर स्वीकार्य है, यद्यपि ऐसे कुछ पैरामीटर हैं जिन्हें केवल कुछ कार्यान्वयन की आवश्यकता होती है, शायद यह कार्यान्वयन के निर्माता (यानी उन्हें रणनीति इंटरफ़ेस से बाहर छोड़ दें) प्रदान करने के लिए अधिक समझदारी होगी, हालांकि यह नहीं हो सकता है अपनी स्थिति में एक विकल्प बनें।

इसके अलावा, एक और विकल्प Parameters वर्ग बनाना है और अपनी रणनीति विधि को इनमें से एक लेना है। इस वर्ग में विभिन्न पैरामीटर (यानी int num) के लिए गेटर्स हो सकते हैं, और यदि किसी विशेष कार्यान्वयन को num का उपयोग करने की आवश्यकता नहीं है तो यह बस parameters.getNum() पर कॉल नहीं करेगा। यह आपको मौजूदा पैरामीटर कार्यान्वयन या इंटरफेस को बदलने के बिना नए पैरामीटर जोड़ने में लचीलापन भी देता है।

इसके साथ, Parameters जैसी कक्षा मुझे महसूस करती है कि कहीं और एक अमूर्त विफलता रही है, हालांकि कभी-कभी आपको इसे काम करना होगा।