Для упрощения, скажем, у меня есть интерфейс RandomProvider
интерфейс
public interface RandomProvider
{
double nextRandom();
}
И, скажем, у меня есть 3 различных реализации этого интерфейса: ARandom, BRandom, CRandom. Я хочу собрать немного статистики о реализации:
- сколько раз
nextRandom()
называется
- сумма сгенерированных случайных чисел (это может звучать глупо, но это только пример).
В конце эта статистика будет записана в БД. Это интенсивно используемые классы из нескольких потоков, поэтому невозможно писать значения каждый раз, когда приходит запрос.
Первая идея, которая приходит мне в голову: я создаю синглтон, который содержит эти данные, реализации вызывают синглтон и увеличивают необходимую статистику. Другой класс читает из синглтона и записывает результаты в БД и уменьшает статистику. Но я прочитал так много статей о том, насколько злы глобально изменяемые данные и синглтоны, поэтому я боюсь идти по этому пути.
Есть еще идеи?