java - Java 中有效且漂亮的字符串条件

标签 java string conditional-statements

我有一个关于代码风格的问题:

假设我有一个包含一些信息的字符串(例如“Information1”或“Information2”)。基于此我想用工厂创建对象。显然我可以这样写:

if(string.equals("Information1")){
  Factory.createInformation1Object();
}
if(string.equals("Information2")){
  Factory.createInformation2Object();
}
if(string.equals("Information3")){
  Factory.createInformation3Object();
}

现在我想知道是否有更好(更漂亮)的方法来做到这一点。我真的很喜欢访问者模式的多重调度思想,但我看不出有什么方法可以轻松地将其应用于这个特定问题。

最佳答案

您可以使用 abstract factory pattern .

创建摘要 Factory类 [或接口(interface)],以及扩展它的类:MyObject1Factory , MyObject2Factory , ...

在预处理时,填充 Map<String,Factory>来自String到对应的Factory例如,这只在您的应用程序中完成一次。

当您需要创建一个新实例时 - 调用 map.get(string).create()创建相关类型的相关对象。

编辑:带代码的小示例:
你的类(class)是:

public static class MyBase { 
    @Override
    public String toString() {
        return "Base";
    }
}
public static class Class1 extends MyBase { 
    @Override
    public String toString() {
        return "Class1";
    }
}
public static class Class2 extends MyBase { 
    @Override
    public String toString() {
        return "Class2";
    }
}

你的工厂将是:

public static abstract class MyFactory {
    public abstract MyBase build();
}
public static class MyFactory1 extends MyFactory {
    @Override
    public Class1 build() {
        return new Class1();
    }
}
public static class MyFactory2 extends MyFactory {
    @Override
    public Class2 build() {
        return new Class2();
    }
}

在程序生命周期内只填充一次 map :

    Map<String,MyFactory> map = new HashMap<String, Test.MyFactory>();
    map.put("class1", new MyFactory1());
    map.put("class2", new MyFactory2());

当您需要一个新对象时,调用:

    MyBase obj = map.get(s).build();
    System.out.println(obj);

(*) 注意:classes 的 static 关键字在这里是因为我将它们创建为内部类 - 当然,如果不是你的情况,你需要省略它....

关于java - Java 中有效且漂亮的字符串条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9783788/

相关文章:

java - Scala:函数测试字符串的唯一字符

android - 如何为单个textview设置多次点击事件?

php - 具有内部连接和多个条件的 MySQL 查询

java - Spring数据,按嵌套对象的属性查找

java - 在运行时在 java 中拖放 jcomponents

java - 查找空格时indexOf()返回-1

javascript - If 语句较短的逻辑

javascript - document.documentElement.scrollTop 条件

Java:JPanel 矩形问题?

string - 如何在 Swift 中创建子字符串?