基于SO上的各种线程(例如,将多个if\Else替换为设计模式或将ifelse语句替换为模式(我了解我可以用Command pattern
替换多个ifelse statements
。
但是对于我这个级别的人来说,答案远非简单或详细......我会有 60 个else if
块.疯狂的一些研究,我发现命令模式是最好的..搜索有关如何逐步执行此操作的教程似乎很困难,因为我发现的只是在复杂的事情中扩展......相信我,如果我没有做很多研究并放弃互联网,我不会在这里提出问题!(我相信这个问题的答案,会受到试图实现同样事情的人的赞赏,因为到目前为止,互联网上还没有明显且结构良好的答案(
编辑2:这是我所有其他if块的结构:
else if (data.equals("Exercice Inolerance, ")) {
AddCode(mmDatabase.getTesta2());}
else if (data.equals("Neta, ")) {
AddCode(mmDatabase.getTesta3());}
PS:itemList.add 的范围可以从 1 到 10!
如何通过步骤将其转换为命令模式..谢谢!
Item.Java
public class Item {
private String name = "";
public Item() {
}
public Item(String name){
this.name = name;
}
public String getItemName() {
return name;
}
public void setItemName(String name) {
this.name = name;
}
}
首先想到的是添加一个
Class<? extends Activity> handlerActivity;
字段,在构造函数中初始化它,例如
new Item("Jenny",Figures.class);
并在您的onItemClick方法中只需做
Intent intent = new Intent(DecisionTree.this, itemList.get(position).getHandlerActivity());
startActivity(i);
(或以任何其他方式将项目映射到其处理活动(
正如你帖子的第一条评论所说,不要仅仅为了应用模式而应用模式。当然,我在这里提供的解决方案远非完美,它只是为了帮助您摆脱ifs。我假设Jenny,Bladna和Drafat是某种业务常量,所以通常你会使用枚举常量或单独的类(如果你的设计更复杂(来实现多态行为
。编辑:这是你的代码
public class Item {
private final String name;
private final Class<? extends Activity> handlingActivity;
public Item(String name, Class<? extends Activity> handlingActivity) {
this.name = name;
this.handlingActivity = handlingActivity;
}
public Class<? extends Activity> getHandlingActivity() {
return handlingActivity;
}
public String getName() {
return name;
}
}
用法:
itemList.add(new Item("Jenny", Figures.class));
itemList.add(new Item("Bladna", State.class));
itemList.add(new Item("Drafat", Casa.class));
itemListAdapter.notifyDataSetChanged();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(DecisionTree.this, itemList.get(position).getHandlingActivity())
startActivity(intent);
}
}