我正在重构我的代码并被阻止。我有一个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
是一个界面。
答案 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)
我看到的另一种选择方式:您可能正在使用地图。
然后你可以编写像
这样的代码callbacks.get(item.getItemId()).doCallback();
但这似乎也有点牵强#34;并且可能不是很多" android风格"做事。