3

我有这个问题,在我的代码中有几个部分,我检查是否满足这些特定条件,以便我可以了解我正在检查的内容是一种类型还是另一种类型。这最终会变大 if else 树,因为我要进行大量检查,每种方法中的检查相同,并且我要检查的东西可能有几种不同的类型。我知道这可以使用对象来解决!具体来说,我要检查的是文件中的 4 个字符串值。基于这些字符串值,4 个字符串一起可以构成 3 种类型之一。我不是每次需要获取 4 个字符串组成的类型时都进行这些相同的检查,而是想知道是否可以在给定这 4 个字符串的情况下创建一个通用对象,然后确定该对象是否是特定类 1、2、或 3。

假设我将 4 个字符串创建的通用对象命名为 Sign。我会使用这 4 个字符串并创建一个新的 Sign 对象:

Sign unkownType = new Sign(string1, string2, string3, string4);

我需要检查这个标志是哪种特定类型的标志。

编辑:更详细地说,我正在检查的标志不是像“+”或“-”这样的符号,它们是带有文字的标志,就像你在路上看到的那样。每个标志上有 4 行,需要检查它们以查看每行的计算结果是否与特定类型的标志匹配。SignType1 的第一行与 SignType2 的第一行不同,我想将这 4 行(字符串)传递给一个对象,并在我的代码中使用该对象从中获取值,而不是制作相同的值检查每种方法。如果您要我显示一些代码,我可以,但这没有多大意义。

4

2 回答 2

2

您似乎要求的是工厂模式

public interface ISign {
    public void operation1();
    public void operation2();

}

和一个工厂类,用于根据输入生成类

public class SignGenerator {
    public static ISign getSignObject(String str1,String str2, String str3, String str4) {
        if(str1.equals("blah blah"))
           return new FirstType();
        if(str1.equals("blah blah2") && str2.equals("lorem ipsum"))
           return new SecondType();
        return new ThirdType();
    }
}

public class FirstType implements ISign {
}

public class SecondType implements ISign {
}

public class ThirdType implements ISign {
}

在这些类中实现所有类型特定的逻辑,这样您就可以调用它们而无需先检查大量 if..else 子句

于 2013-06-09T00:23:03.290 回答
0

根据我从你的陈述中收集到的信息。说:如果给定的字符串等于您指定的whateva值,则创建返回某个对象的方法

    //provided the objects to be returned are subtypes of Sign
    public Sign getInstance(String first, String second, String third, String fourth)
    {

        if(first==null || second==null || third==null || fourth===null )
            return null;

      if(compare1.equals(first))
       return new SignType1();
      else
      if(compare2.equals(second))
       return new SignType2();
      else  
      if(compare3.equals(third))
       return new SignType3();
      else
      if(compare4.equals(fourth))
       return new SignType4();

    }

上面的代码检查并返回与传递的字符串相对应的适当实例 希望这就是您所关心的

于 2013-06-09T00:33:20.470 回答