gpt4 book ai didi

java - 返回破坏封装的 lambda 是糟糕的设计标志

转载 作者:行者123 更新时间:2023-11-30 08:01:18 24 4
gpt4 key购买 nike

我有一个 Game需要由 Generator 生成的一些资源的类类。每个游戏都有自己的生成器,因为生成器是需要实例化的重对象,Game保留一个包含实例的对象池。在每个生成器中,我都有这样的方法:

private MapBoardGenerator(Game game) {
super(game);
}

public static MapBoardGenerator getInstance(Game game) {
MapBoardGenerator instance = game.getGenerator(MapBoardGenerator.class);
if (instance == null) {
instance = new MapBoardGenerator(game);
game.addGenerator(MapBoardGenerator.class, instance);
}
return instance;
}

这个静态方法在每个扩展 Generator 的类中几乎是相同的.

我想做的是提供一个 Supplier<MapBoardGenerator>game所以控制将在别处进行并且getInstance方法将是:

public static MapBoardGenerator getInstance(Game game) {
return game.getInstance(MapBoardGenerator.class, MapBoardGenerator::new);
}

如果我传递调用私有(private)构造函数的供应商,是否有问题?这是一个大学项目,设计在这里很重要。

最佳答案

我的 2 美分:也许您应该看看洋葱架构。在洋葱架构中,您的业务(游戏?)由基础设施组件(发电机?)引用。这可能意味着将 lambda 表达式从 Generator 实例注入(inject)(或委托(delegate))到 Game 实例中,以保持层和职责的良好分离。

我不明白为什么你应该通过反射来实例化一个新实例(对我来说这是一个 hack,但是,因为我来自 C#,也许这句话不合适)......

关于java - 返回破坏封装的 lambda 是糟糕的设计标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37798570/

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