将 if else 语句替换为模式示例



基于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);
}
}

最新更新