मेरे पास नियंत्रक है जो यूआरएल से लिया गया कमांड नाम के अनुसार कुछ आदेश निष्पादित करता है। मुख्य बिंदु का उपयोग नहीं किया जाता है अगर खंड और स्विच स्विच करें। जैसा कि मुझे पता है कि इसे कैसे करना है केवल दो तरीके हैं - 1) कमांड पैटर्न 2) प्रतिबिंब।कमांड पैटर्न बनाम प्रतिबिंब
//Command pattern
class Controller{
private HashMap<String,Command> commands;
public void executeCommand(String commandName){
commands.get(commandName).execute();
}
...
}
//reflection
class Controller{
public void readCommand(){
....
}
public void executeCommand(String commandName){
this.getClass().getMethod(commandName+"Command").invoke(this);
}
...
}
तो questios:
- कौन सा बेहतर है?
- क्या यह एक अनुप्रयोग में सामान्य है कि डेवलपर्स को उनके इच्छित तरीकों में से एक का उपयोग करने दें।
- क्या अन्य तरीके हैं?
यदि उपयोगकर्ता 'निष्पादित' में प्रवेश करता है तो क्या होता है? क्या वह 'executeCommand' को खुद को बार-बार कॉल करने का प्रयास करेगा? इस तरह से प्रतिबिंब का उपयोग करके, जहां आप उपयोगकर्ता द्वारा दर्ज की गई स्ट्रिंग का उपयोग यह निर्धारित करने के लिए करते हैं कि कौन सा विधि नाम निष्पादित करना है, ** बहुत ** खतरनाक दिखता है। साथ ही साथ अपने कार्यक्रम पर एक संकेत डाल सकते हैं "अरे, साइबर अपराधियों! इस तरह !!!" – ajb
@ajb आपकी टिप्पणी के लिए धन्यवाद। मुझे पता है, यही कारण है कि हम xml (url -> घटक, कमांड) के माध्यम से url mapper का उपयोग करते हैं। विचार को पारित करने के लिए मैंने "यूआरएल से लिया" लिखा था। –