当前位置: 首页 > 知识库问答 >
问题:

用模式示例替换if-else语句

鲁峰
2023-03-14

基于SO上的各种线程(例如。用设计模式替换多个If\Else或用模式替换if else语句)我知道我可以用< code >命令模式替换多个< code>if\else语句。

但对于我这个级别的人来说,答案远不是简单或详细的。我会有60个,否则会阻塞。我做了一些研究,发现命令模式是最好的。搜索关于如何一步一步的教程似乎很难,因为我发现的都是复杂的事情。相信我,如果我没有在网上做大量的重新搜索和放弃,我不会在这里提出问题!(我相信,这些问题的答案会受到试图实现相同目标的人们的赞赏,因为迄今为止,互联网上还没有明显且结构良好的答案)

EDIT2:
这是所有其他if块的结构:

 else if (data.equals("Exercice Inolerance, ")) {
        AddCode(mmDatabase.getTesta2());}

 else if (data.equals("Neta, ")) {
        AddCode(mmDatabase.getTesta3());}

PS:项目列表。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;
    }

}

共有1个答案

长孙景焕
2023-03-14

首先想到的是添加

Class<? extends Activity> handlerActivity;

字段添加到Item类,在构造函数中初始化它,如

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);

                }
            }
 类似资料:
  • 我有一个if else语句,它可能会在不久的将来增长。 因为,这看起来已经很乱了,我想如果我能在这里应用任何设计模式会更好。我研究了战略模式,但我不确定这是否会降低其他条件。有什么建议吗?

  • 基于SO上的各种线程(例如。用模式替换if else语句)我知道我可以用< code>Command模式替换多个if\else语句。 我的情况有点不一样。 我有一系列,只有当前一个命令不成功时,我才需要执行每个。 例如,假设我需要从一个假设的网页中检索文本——我可以使用屏幕抓取直接从页面中抓取文本,也可以从API中获取文本。如果屏幕抓取不成功,我只想从API获取文本。换句话说,如果“scrap”命

  • Swift 条件语句 一个 if 语句 后可跟一个可选的 else if...else 语句,else if...else 语句 在测试多个条件语句时是非常有用的。 当你使用 if , else if , else 语句时需要注意以下几点: if 语句后可以有 0 个或 1 个 else,但是如果 有 else if 语句,else 语句需要在 else if 语句之后。 if 语句后可以有 0

  • else语句可以与if语句结合使用。 else语句包含else语句中的条件表达式解析为0或FALSE值时执行的代码块。 else语句是一个可选语句, else后面最多只能有一个else语句。 语法 (Syntax) if...else语句的语法是 - if expression: statement(s) else: statement(s) 流程图 (Flow Diagram) 例

  • 本文向大家介绍python 中if else 语句的作用及示例代码,包括了python 中if else 语句的作用及示例代码的使用技巧和注意事项,需要的朋友参考一下 引入:if-else的作用,满足一个条件做什么,否则做什么。 if-else语句语法结构 if 判断条件: 要执行的代码 else: 要执行的代码 判断条件:一般为关系表达式或bool类型的值 执行过程:程序运行到if处,首先判断所

  • 我想要什么 在JPanel上,我有一个JButton和一个JTextArea。按下JButton后,必须在JTextArea中打印某些文本。此特定文本由if-else语句确定。if-else的条件基于整数变量R。 基本上,这是我试图进行的类似问答的调查。我使用R来记录用户的答案。当用户单击一个选项时,R的值会更新。 我使用字符串变量你的手机。如果R的值为最后例如120,则您的手机将更新为字符串,例