java – 没有if,切换实现Factory的最佳方法
作者:互联网
我正在寻找许多方法来实现Java中的Factory模式,但仍然找不到一个完美的方法,如果/ switch plus不使用反射,则不会受到影响.
我找到的最好的一个是Tom Hawtin的回答:https://stackoverflow.com/a/3434505/1390874
但我最担心的是它将匿名类的HashMap存储在内存中.
问题是除了Tom Hawtin的答案之外,人们还会考虑使用Class.newInstance()吗?
这样可以避免我们在内存中存储不必要的匿名类吗?加上代码会更干净.
它看起来像这样:
class MyFactory {
private static final Map<String,Class> factoryMap =
Collections.unmodifiableMap(new HashMap<String,Class>() {{
put("Meow", Cat.class);
put("Woof", Dog.class);
}});
public Animal createAnimal(String action) {
return (Animal) factoryMap.get(action).newInstance();
}
}
解决方法:
如果您使用的是java 8,则可以设置如下的枚举:
enum AnimalFarm {
Meow(Cat::new),
Woof(Dog::new);
public final Supplier<Animal> factory;
private AnimalFarm(Supplier<Animal> factory) {
this.factory = requireNonNull(factory);
}
}
......
Animal dog = AnimalFarm.valueOf("Woof").factory.get();
您甚至可以使用枚举工具Supplier< Animal>然后执行AnimalFarm.valueOf(“Meow”).get();.
标签:java,factory,design-patterns,factory-pattern 来源: https://codeday.me/bug/20190824/1710870.html