새로운 디자인 패턴입니다. 나는 하나의 주제와 여러 관찰자가있는 코드 조각을 쓰고있다. 주체와 관찰자 모두 인터페이스가 있습니다. 5 명의 옵저버가 있다면, 별도의 업데이트 방법으로 5 개의 다른 인터페이스를 만들어야합니까? 아니면 하나의 인터페이스 만 만들고 모든 옵저버에 대해 5 가지 업데이트 방법을 작성해야합니까?디자인 패턴 - 다중 옵저버
답변
많은 관찰자 클래스가 구현할 수있는 관찰자 인터페이스가 하나만 있으면됩니다. 관찰자가 변경 통보에 어떻게 반응하는지는 다를 것이다. 이것이 귀하에게 해당되는지 여부는 귀하의 프로그램 구조와 필요에 완전히 의존합니다.
단일 인터페이스를 공유하는 관찰자는 관찰 된 내용의 다양한 변경 사항을 수신 할 수 있지만 동일한 인터페이스를 사용합니다. 예를 들어, PropertyChangeListener를 옵저버 인터페이스로서 사용했을 경우는, 옵저버에 건네진 PropertyChangeEvent로 돌려 주어지는 propertyName를 체크해, 청취 대상을 기본으로 할 수가 있습니다.
그러나 관찰자가 듣는 내용이 매우 다르면 예를 들어 고유 한 인터페이스가 필요할 수도 있습니다. 그것이 내가 가장 잘 알고있는 Swing 예제를 사용하면 ActionListener, MouseListener, MouseMotionListener 등 다양한 리스너 클래스와 인터페이스를 사용할 수 있습니다. 모두 공통 슈퍼 인터페이스 인 EventListener에서 파생되었지만 모두 AWTEvent 클래스의 공통 수퍼 클래스를 기반으로하는 리스너에 매개 변수를 전달합니다.
보다 구체적인 도움을 받으려면 문제에 대해 더 자세히 알려주십시오.
Java EE를 사용하는 경우 JMS를 사용하여 주제와 구독자를 사용하는 것이 좋습니다 ... 더 강력합니다. 나는 당신이 찾고있는 솔루션의 종류를 모르지만 당신이 지속하고 데이터를 잃지 않도록 해야하는 경우 더 강력 할 것입니다 ...
뭔가가 필요하면 망설이지 말라.
별도의 업데이트 방법으로 5 가지 인터페이스를 만들어야합니까? 아니면 하나의 인터페이스를 만들고 모든 옵저버에 대해 5 가지 업데이트 방법을 작성해야합니까?
5 가지 업데이트 방법을 사용하는 하나의 인터페이스는 5 가지 다른 인터페이스보다 훨씬 응집력이 적은 것처럼 보입니다. 그러나 한 종류의 주제 (Observers에 고객) 만 있습니다. 그러나 그것은이 클라이언트가 얼마나 응집력이 있는지에 달려 있습니다.
interface segregation principle은 결정을 돕기 위해 여기에 적용됩니다. 자세한 내용을 제공하면 더 많은 의견을 제시 할 수 있습니다.
- 1. 옵저버 디자인 패턴 질문
- 2. 옵저버? 디자인 패턴
- 3. 옵저버 패턴 - 옵저버 생성
- 4. 옵저버 디자인 패턴 클래스 문제
- 5. 멀티 스레드 옵저버 용 디자인 패턴
- 6. 수정 된 옵저버 디자인 패턴 C++
- 7. 옵저버 디자인 패턴 - 특정 알림 유형 구독
- 8. MVC, 스윙, 옵저버 패턴 디자인 결정
- 9. 옵저버 패턴
- 10. 디자인 패턴, 다중 상속
- 11. 다중 콜백 디자인 패턴?
- 12. 옵저버 패턴 혼동
- 13. 옵저버 패턴 이해
- 14. wxPython의 옵저버 패턴
- 15. 옵저버 패턴 오버로드
- 16. 옵저버 패턴 또는 콜백?
- 17. 옵저버 패턴 imp
- 18. SI + 옵저버 패턴
- 19. JSF/PrimeFaces 옵저버 패턴
- 20. Yammer api의 옵저버 패턴
- 21. weak_ptr을 사용하는 옵저버 패턴
- 22. GWT의 옵저버 패턴
- 23. 자바 스윙과 옵저버 패턴
- 24. 옵저버 패턴 클래스 (JAVA)
- 25. Android의 옵저버 패턴
- 26. 옵저버 패턴 구현
- 27. 스위프트, 폐쇄와 옵저버 패턴
- 28. Go 언어의 옵저버 패턴
- 29. J2ME의 옵저버 패턴
- 30. 옵저버 패턴 - 변형
예, 이벤트가 동일한 경우에만 가능합니다. 5 개의 완전 무관 한 것들을 관찰한다면 5 개의 인터페이스를 가질 수 있습니다. –
@DavidEhrmann : 때로는 사실이지만 반드시 그런 것은 아닙니다. 편집을 참조하십시오. –