मेरे पास एक उपयोग कक्षा है जो कुछ काम करती है। जाहिर है, यह विस्तार के लिए बंद है और सभी विधियां स्थैतिक हैं। सादगी के लिए, वर्ग इस तरह दिखता है:स्थैतिक वर्गों के लिए टेम्पलेट विधि पैटर्न
public final class Util {
private Util() { }
public static void doWork() {
// some work
int variable = help();
// some work uses variable
}
private static int help() {
// some helper functionality
}
}
वर्ग विधि doWork
कि गणना का एक बहुत करता है। वैसे, विधि कुछ परिणाम प्राप्त करने के लिए सहायक विधि help
पर कॉल करती है और शेष कोड help
विधि द्वारा परिणाम का उपयोग करते हैं।
अब, ग्राहक कोड में मैं विधि doWork
की कार्यक्षमता का पुन: उपयोग करना चाहते हैं, लेकिन इसके बजाय help
बुलाने की मैं help2
विधि कॉल करना चाहते हैं। सबसे आसान समाधान केवल help
help2
को बदलने के साथ विधि doWork2
बनाएं।
यह बहुत खराब दृष्टिकोण है, क्योंकि doWork
में प्रत्येक परिवर्तन को doWork2
में दोहराया जाना चाहिए। यह Template Method
पैटर्न के समान है, लेकिन इस तथ्य के कारण कि हमारे पास यहां विस्तार नहीं है, हम इसे लागू नहीं कर सकते हैं।
बेस्ट समाधान मैं इस विधि के लिए पैरामीटर जोड़ने, लेकिन doWork
की सभी मौजूदा उपयोगकर्ताओं की रक्षा करने के साथ आया था:
public static void doWork() {
doWorkWithParameter(true);
}
public static void doWorkWithParameter(boolean helpOrHelp2) {
// some work
int variable = helpOrHelp2 ? help() : help2();
// some work uses variable
}
बेहतर डिजाइन समाधान इस समस्या को हल करने के लिए लागू किया जा सकता कर रहे हैं क्या? Template Pattern
जैसे लचीलापन प्राप्त करने का कोई तरीका है, लेकिन कक्षाओं का उपयोग करने के लिए आवेदन में है।
अग्रिम धन्यवाद।
तो ऐसा कोई कारण आप अपने समाधान में विधि अधिभार का उपयोग नहीं करते है? 'सार्वजनिक स्थिर शून्य doWork() {...} ' ' सार्वजनिक स्थैतिक शून्य doWork (बूलियन परम) {...}' – Crazenezz
या बेहतर अभी भी 'सार्वजनिक स्थिर शून्य doWork (int चर) '। हालांकि मुझे संदेह है कि वास्तविक जवाब यह है कि भ्रम statics के कारण है और वह वस्तुएं एक क्लीनर उत्तर प्रदान करती हैं - हालांकि अमूर्त उदाहरणों के साथ बताना मुश्किल है। –
जो आप खोज रहे हैं वह रणनीति पैटर्न है। अर्नाल्डो के जवाब की जांच करें। –