编程语言
首页 > 编程语言> > java – 没有if,切换实现Factory的最佳方法

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