2016-11-22 2 views
-4

Java 관찰자 패턴에서 Subject는 관찰자 목록이 Subject에있을 때 채워지는 관찰자 목록을 가지고 있습니다.java : observer 패턴 이론적 인 문제

1000 명의 옵서버가 Subject에 등록했다고 가정합니다. 제목에 제목 목록 클래스가 있습니다.

이제 며칠이 지나면 관찰자는 더 이상 주체로부터 알림에 관심이 없지만 관찰자는 등록을 취소하는 것을 잊어 버립니다 (또는 게으르다는 것을 잊지 마십시오).

여기에 제목에는 불필요한 관찰자의 개체가있어 목록에서 불필요한 메모리를 낭비합니다.

메모리가 정말로 중요하고 메모리를 낭비하고 싶지 않은 경우 해결책은 무엇입니까?

해결책은 거짓 참조입니까?

등록을하고있는 동안, 우리는 10 일 후에 등록을해야합니다. 그러면 관찰자가 다시 등록해야합니다.

+2

_ "관찰자는 버그를 잊어 버렸거나 (게으른) 등록을 취소합니다"_ - 버그라고합니다. –

+0

실제 시나리오에서는 대개 이런 일이 발생합니다. 우리는 YouTube 채널에 등록하고 알림을받습니다. YouTube에서 알림을 제공하지만 관심이 없습니다. 나는 어떤 기억 문제도 가지지 않는다, youtube는 나에게 알림을 보내는 것을 계속한다. 하지만 YouTube 쪽에서 보면 메모리 낭비입니다. 나는 텔레콤 시나리오에서 이런 종류의 사건에 직면 해있다. – VJS

+0

@VJS 그래서 u가 관심이 없다면, 또한 등록 취소 옵션은 왜 등록을 취소합니까 ?? 컴퓨터는 사용자의 마음이 아닌 메모리를 읽을 수 있습니다. :)) –

답변

0

당신이하려는 것은 디자인 패턴 (옵서버)에 대한 유스 케이스 (예 : 뉴스 레터 등록/등록 취소)를 비교하는 것입니다. 유스 케이스는 비즈니스 요구 사항에 기반합니다. 사용자를 잃고 싶지 않다면 등록 된 목록에서 사용자를 삭제하고 싶지 않을 것입니다. 한편 비즈니스 요구 사항이있는 경우 사용자를 괴롭 히거나 비활성 사용자 (이 뉴스 레터에서 클릭률을 추적 함)에 귀찮게하지 않으려면 일정 시간 후에 제거 할 수 있습니다.

유스 케이스는 디자인 패턴과 유사하게 구현 될 수 있지만 완전히 다른 응용 분야 (일반적으로 프리젠 테이션 레이어에는 Observer가 사용됨)가 있습니다. 실제 디자인 패턴과 관련이 거의 없습니다.

변경 사항을 유스 케이스 및 변형으로 반영하려면 인터페이스 계약의 일부인 경우 (예 : 통지로 처리하는 경우) 시간이 지나면 목록 제거를 구현할 수 있습니다. 입니다. 결국 패턴.

0

구독자가 제어 할 수있는 경우 구독자 측의 문제를 해결해야 구독자가 구독자를 삭제하게됩니다.

한편 가입이 공개적으로 사용 가능한 경우 등록을 취소해야하는 시스템을 무시해야합니다. 아직 등록되어 있지 않아야하는 시스템을 구별 할 수 없습니다.

일부 시간 간격으로 서비스를받는 경우 일부 시간 초과가있는 구독이 좋을 것입니다.

관련 문제