重构包含没有参数的方法的switch语句

时间:2016-09-08 13:57:01

标签: java android switch-statement refactoring

我正在重构我的代码并被阻止。我有一个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;
    }
}

我正在为Android编码,所以使用java 1.7。 GiftListPresenterViewConnector是一个界面。

4 个答案:

答案 0 :(得分:1)

理论上,当MenuItem.id拥有此通用实例并且进入MenuItem时只需调用manageMenuAction,您就可以实现通用MenuItem.getItemId().executeBehavior()行为。

(您也可以制作通用MenuItem,而不是保留id的通用实例

老实说,我不会这样做,因为id可能只是一个简单的Integer,而切换案例可能是最简单的方法

答案 1 :(得分:1)

考虑使用'command'设计模式https://en.wikipedia.org/wiki/Command_pattern

答案 2 :(得分:0)

对我来说突出的项目是createInfoDialog,因为它是唯一没有通过activityConnector的路径。如果你要使用GiftListPresenterViewConnector的方法,则可以将整个方法移动到该类中,而不需要将其作为参数。但我同意其他评论者的意见;这种方法看起来很好。

答案 3 :(得分:0)

我看到的另一种选择方式:您可能正在使用地图。

  1. 密钥将是您的商品ID
  2. 将是一些通用回调对象
  3. 然后你可以编写像

    这样的代码
    callbacks.get(item.getItemId()).doCallback();
    

    但这似乎也有点牵强#34;并且可能不是很多" android风格"做事。