문제

물건을 단순화하기 위해 인터페이스가 있다고 가정 해 RandomProvider 상호 작용

public interface RandomProvider
{
    double nextRandom();
}

그리고이 인터페이스, Arandom, Brandom, Crandom의 3 가지 구현이 있다고 말합니다. 구현에 대한 몇 가지 통계를 수집하고 싶습니다.

  • 몇 번 nextRandom() 호출됩니다
  • 생성 된 랜덤 숫자의 합계 (바보 같은 소리가 들릴 수 있지만 이것은 예입니다).

결국이 통계는 DB에 기록됩니다. 이들은 여러 스레드에서 크게 사용되는 클래스이므로 요청이 올 때마다 값을 작성할 수 없습니다.

내 마음에 오는 첫 번째 아이디어는 이러한 데이터를 보유하는 싱글 톤을 만들고 구현이 싱글 톤을 호출하고 필요한 통계를 늘리는 것입니다. 다른 클래스는 싱글 톤에서 읽고 결과를 DB에 기록하고 통계를 줄입니다. 그러나 나는 전 세계적으로 변한 데이터와 싱글 톤이 얼마나 악한지에 대한 많은 기사를 읽었으므로, 나는 이런 식으로 가기를 두려워합니다.

다른 아이디어가 있습니까?

도움이 되었습니까?

해결책

그렇습니다. 싱글 톤은 사악한 아이디어가 될 수 있지만, 사용에 달려 있습니다. 싱글 톤을 사용하여 코드가 작동하는 경우 (글로벌 중앙 객체와 같은 다른 클래스를 만질 수 있음) 나쁘다.

그러나 궁극적으로 당신은 단순히 정보 (로거)를 기록하는 방법을 찾고 있으며이 경우 싱글 톤을 사용 하여이 데이터를 기록하거나 일부 텍스트 / 로그 파일에 로그인하는 것은 나쁜 결정이 아닙니다.

다른 팁

AOP를 사용하여 해당 특정 방법의 모든 호출을 기록 할 수 있습니다. 확인하다 종자. 기본적으로 주변의 조언을 사용하여 모든 통화를 가로 채고 통계를 수집하고 사용자 정의 작업을 수행합니다 (이 경우 임의 번호를 추가). 그런 다음 이것을 DB에 저장하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top