gpt4 book ai didi

java - 每个模拟实例一个报告实例 : use a singleton?

转载 作者:行者123 更新时间:2023-11-30 04:54:53 25 4
gpt4 key购买 nike

我编写了运行许多不同模拟的代码,每个模拟都有自己的 Simulation目的。从 Simulation 中提取结果,我们首先要问Simulation创建 Report 的实例(作为 Simulation 的 child 之一)。

尽管 Simulation可以包含许多实例 Report ,创建过程是相当昂贵的,所以如果已经有 Report特别是Simulation ,我想重新使用它而不是创建一个新的。

Report从我的代码中的许多不同的类访问实例。我想避免重复首先检查 Report 是否存在的代码已存在于该特定 Simulation 中,然后在此基础上获取现有的或创建一个新的。

我真的只希望有一个 Report 的实例每Simulation -- 有点像单例......

我看到两条途径:

  1. 制作一种“单例”报表类,允许创建不超过一个 ReportSimulation 。这可能吗?

  2. 制作 SpecialSimulation扩展类Simulation ,以及 SpecialSimulation包含一个包含 Report 的单例。这是否太过分了?

SimulationReport来 self 们拥有许可的商业 Java API;我无法修改他们的源代码。

尽我所能学习 Java 和 OOP 的诀窍...

最佳答案

如果我正确理解你的问题,你真的只想做这样的事情:

public class ReportManager {
final static ConcurrentMap<Simulation, Report> reports = new ConcurrentHashMap<Simulation, Report>();

public static Report getReportForSimulation(final Simulation simulation){
if (!reports.containsKey(simulation)) reports.putIfAbsent(simulation, simulation.getReport());
return reports.get(simulation);
}
}

然后使用 ReportManager 检索报告。从积极的一面来看,它非常简单,但从消极的一面来看,理论上它可能会导致在多线程环境中多次生成报告,但这将是一种罕见的情况,并且您可以保证至少所有线程都能看到准确的报告相同的报告

关于java - 每个模拟实例一个报告实例 : use a singleton?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8848027/

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