java - 编写工厂方法最有效的方法是什么?

标签 java design-patterns factory factory-pattern effective-java

<分区>

在大多数情况下,当我们编写工厂方法时,它是一堆可以不断增长的 if 条件。编写这种方法的最有效方法是什么(使用最少的 if 条件)?

public A createA(final String id) {
    if (id.equals("A1")) {
      return new A1();
    }
    else if (id.equals("A2")) {
      return new A2();
    }
    return null;
  }

最佳答案

你可以使用 Map<String, Supplier<A>> :

Map<String, Supplier<A>> map = new HashMap<>();
map.put("A1", () -> new A1());
map.put("A2", () -> new A2());

...

public A createA(final String id) {
    Supplier<A> supplier = map.get(id);
    if (supplier != null) {
        return supplier.get();
    }
    throw new IllegalArgumentException("unknown id: " + id);
}

这使用标准的 Java 8 Supplier接口(interface),使用 Java 8 lambda 语法,但您当然可以定义自己的 Supplier 接口(interface),并使用匿名内部类创建实例。

关于java - 编写工厂方法最有效的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23126207/

相关文章:

go - 使用 go-kit logger api 缺少的方法

java - 旋转开关 View 的剪辑

java - 使用@RequestMapping 注解时获取请求的值(URL)

java - 在 HttpURLConnection.setFixedLengthSTreamingMode() 中获取异常

design-patterns - GoF 设计模式 Bridge/Adapter/Decorator

c# - 在 C# 中区分类名和属性的良好命名约定是什么?

c++ - protected 外部资源使用

c++ - 命名构造函数和继承

.net - 从 DTO 构建领域对象

java - java中的PATH和CLASSPATH变量