gpt4 book ai didi

java - 没有 if, switch 实现工厂的最佳方式

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:54:59 25 4
gpt4 key购买 nike

我正在寻找在 Java 中实现工厂模式的许多方法,但仍然找不到一个完美的方法,它不会同时受到 if/switch 和不使用反射的影响。我发现的最好的答案之一是 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像这样:

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();

你甚至可以拥有 enum实现 Supplier<Animal>然后做 AnimalFarm.valueOf("Meow").get(); .

关于java - 没有 if, switch 实现工厂的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29504945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com