java - रिफैक्टरिंग स्विच स्टेटमेंट जिसमें पैरामीटर नहीं हैं




android switch-statement (3)

'कमांड' डिजाइन पैटर्न https://en.wikipedia.org/wiki/Command_pattern का उपयोग करने पर विचार करें

मैं वर्तमान में अपना कोड रिफ़ाक्टर कर रहा हूं और अवरुद्ध हो गया हूं। मेरे पास एक switch स्टेटमेंट है जो मुझे पता है कि पुन: लागू किया जा सकता है, मुझे बस ऐसा करने का अनुभव नहीं है: (स्विचेस से निपटने के तरीके और पैटर्न के अधिकांश तरीके पैरामीटर का प्रबंधन करने के लिए केंद्रित होते हैं जो तरीकों से भिन्न होते हैं, लेकिन यह मामला यहां नहीं है। विचार मैं इसके बारे में क्या कर सकता हूँ? क्या वास्तव में किसी भी संकेत की सराहना होगी

public void manageMenuAction(MenuItem item, GiftListPresenterViewConnector activityConnector) {
    switch (item.getItemId()) {
        case R.id.nav_your_account:
            activityConnector.goToEditAccount();
            break;
        case R.id.help:
            activityConnector.goToHelpScreen();
            break;
        case R.id.nav_about:
            createInfoDialog();
            break;
        case R.id.nav_exit:
            activityConnector.exitApp();
            break;
        case R.id.nav_logout:
            clearLocalData();
            activityConnector.logout();
            break;
    }
}

मैं एंड्रॉइड के लिए कोडिंग कर रहा हूं, इसलिए जावा 1.7 के साथ काम करना GiftListPresenterViewConnector एक इंटरफ़ेस है GiftListPresenterViewConnector


एक अन्य विकल्प जिस तरह से मैं देख रहा हूं: आप मानचित्र का उपयोग कर सकते हैं।

  1. कुंजी आपकी आइटम आईडी होगी
  2. मूल्य कुछ सामान्य कॉलबैक ऑब्जेक्ट होगा

तो आप कोड लिख सकते हैं जैसे

callbacks.get(item.getItemId()).doCallback();

लेकिन यह भी थोड़ा "दूर-प्राप्त" लगता है; और संभवत: चीजों को करने की "एंड्रॉइड स्टाइल" बहुत ज्यादा नहीं है


सैद्धांतिक रूप से, आप एक जेनेरिक manageMenuAction व्यवहार को लागू कर सकते हैं जब manageMenuAction इस सामान्य उदाहरण को धारण करता है और manageMenuAction को manageMenuAction करते manageMenuAction सिर्फ MenuItem.getItemId().executeBehavior()

(आप id सामान्य उदाहरण को रखने के बजाय एक जेनेरिक MenuItem भी बना सकते हैं)

ईमानदारी से, मैं ऐसा नहीं करूँगा क्योंकि यह id शायद एक साधारण Integer और एक स्विच केस शायद यह करने का सबसे आसान तरीका होगा





refactoring