基于SO上的各种线程(例如Replace Multiple If\Else with Design Pattern或Replacing if else statement with pattern),我了解可以用if\else statements
替换多个Command pattern
。
但是对于我这个级别的人来说,答案远非简单或详尽。.我将有60个else if
块..并且进行了一些研究,我发现命令模式是最佳的。.搜索教程关于如何逐步执行似乎很困难,因为我发现的所有内容都在复杂的问题上得到了解释。相信我,如果我不做很多研究并放弃互联网,我就不会在这里提出问题! (我相信这些问题的答案会受到尝试实现同一目标的人们的赞赏,因为到目前为止,互联网上还没有明显且结构合理的答案)
EDIT2:
这是我所有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;
}
}
答案 0 :(得分:2)
首先想到的是添加一个
Class<? extends Activity> handlerActivity;
将字段添加到Item类,像在构造函数中一样将其初始化
new Item("Jenny",Figures.class);
并在您的onItemClick方法中执行
Intent intent = new Intent(DecisionTree.this, itemList.get(position).getHandlerActivity());
startActivity(i);
(或以其他任何方式将Item映射到其处理活动)
正如您对帖子的第一条评论所述,请勿仅出于应用模式而应用模式。当然,我在这里提供的解决方案远非完美,它只是为了帮助您摆脱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);
}
}