<分区>
在大多数情况下,当我们编写工厂方法时,它是一堆可以不断增长的 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;
}
<分区>
在大多数情况下,当我们编写工厂方法时,它是一堆可以不断增长的 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/