为了简化,我可以说我有一个接口RandomProvider
接口
public interface RandomProvider
{
double nextRandom();
}
并说我有3种不同的接口实现,ARandom,BRandom,CRandom。我想收集一些有关实现的统计信息:
nextRandom()
被调用的次数最后,这些统计数据将记录到DB中。这些是来自多个线程的大量使用的类,因此每次请求时都不可能写入值。
我想到的第一个想法是,我创建一个包含这些数据的单例,实现调用单例并增加必要的统计信息。另一个类从单例中读取并将结果写入DB并递减统计信息。但是我读了很多关于全球可变数据和单身人士如何邪恶的文章,所以我害怕这样做。
还有其他想法吗?
答案 0 :(得分:2)
是的,单身人士可能是一个邪恶的想法,但这取决于他们的用途。如果你只使用单例来使你的代码工作(允许它触及其他类,如全局中心对象)那么它就很糟糕了。
但最终你只是在寻找一些记录信息的方法(记录器),在这种情况下,使用单例来记录这些数据甚至将其记录到某些文本/日志文件并不是一个糟糕的决定。 / p>
答案 1 :(得分:2)
您可以使用AOP记录该特定方法的所有调用。检查AspectJ。基本上,您将使用around建议拦截所有呼叫并收集统计信息并执行自定义操作(在这种情况下将随机数加起来)。然后将其存储到数据库中。