2014-03-26 4 views
0

새로운 디자인 패턴입니다. 나는 하나의 주제와 여러 관찰자가있는 코드 조각을 쓰고있다. 주체와 관찰자 모두 인터페이스가 있습니다. 5 명의 옵저버가 있다면, 별도의 업데이트 방법으로 5 개의 다른 인터페이스를 만들어야합니까? 아니면 하나의 인터페이스 만 만들고 모든 옵저버에 대해 5 가지 업데이트 방법을 작성해야합니까?디자인 패턴 - 다중 옵저버

답변

4

많은 관찰자 클래스가 구현할 수있는 관찰자 인터페이스가 하나만 있으면됩니다. 관찰자가 변경 통보에 어떻게 반응하는지는 다를 것이다. 이것이 귀하에게 해당되는지 여부는 귀하의 프로그램 구조와 필요에 완전히 의존합니다.

단일 인터페이스를 공유하는 관찰자는 관찰 된 내용의 다양한 변경 사항을 수신 할 수 있지만 동일한 인터페이스를 사용합니다. 예를 들어, PropertyChangeListener를 옵저버 인터페이스로서 사용했을 경우는, 옵저버에 건네진 PropertyChangeEvent로 돌려 주어지는 propertyName를 체크해, 청취 대상을 기본으로 할 수가 있습니다.

그러나 관찰자가 듣는 내용이 매우 다르면 예를 들어 고유 한 인터페이스가 필요할 수도 있습니다. 그것이 내가 가장 잘 알고있는 Swing 예제를 사용하면 ActionListener, MouseListener, MouseMotionListener 등 다양한 리스너 클래스와 인터페이스를 사용할 수 있습니다. 모두 공통 슈퍼 인터페이스 인 EventListener에서 파생되었지만 모두 AWTEvent 클래스의 공통 수퍼 클래스를 기반으로하는 리스너에 매개 변수를 전달합니다.

보다 구체적인 도움을 받으려면 문제에 대해 더 자세히 알려주십시오.

+1

예, 이벤트가 동일한 경우에만 가능합니다. 5 개의 완전 무관 한 것들을 관찰한다면 5 개의 인터페이스를 가질 수 있습니다. –

+0

@DavidEhrmann : 때로는 사실이지만 반드시 그런 것은 아닙니다. 편집을 참조하십시오. –

0

Java EE를 사용하는 경우 JMS를 사용하여 주제와 구독자를 사용하는 것이 좋습니다 ... 더 강력합니다. 나는 당신이 찾고있는 솔루션의 종류를 모르지만 당신이 지속하고 데이터를 잃지 않도록 해야하는 경우 더 강력 할 것입니다 ...

뭔가가 필요하면 망설이지 말라.

1

별도의 업데이트 방법으로 5 가지 인터페이스를 만들어야합니까? 아니면 하나의 인터페이스를 만들고 모든 옵저버에 대해 5 가지 업데이트 방법을 작성해야합니까?

5 가지 업데이트 방법을 사용하는 하나의 인터페이스는 5 가지 다른 인터페이스보다 훨씬 응집력이 적은 것처럼 보입니다. 그러나 한 종류의 주제 (Observers에 고객) 만 있습니다. 그러나 그것은이 클라이언트가 얼마나 응집력이 있는지에 달려 있습니다.

interface segregation principle은 결정을 돕기 위해 여기에 적용됩니다. 자세한 내용을 제공하면 더 많은 의견을 제시 할 수 있습니다.