2010-06-01 5 views
6

방금 ​​Observable, Observer 및 그 방법이 update() 인 것을 가지고 놀기 시작했는데, 다른 동작이 notifyObservers()이라고 할 때 나는 어떻게해야하는지 이해할 수 없습니다.Java에서 Observer의 update() 내에서 다른 작업을 수행하는 방법은 무엇입니까?

Observable 클래스에는 결국 setChanged()notifyObservers()을 호출하는 몇 가지 다른 메소드가 있습니다. 호출 된 메서드에 따라 UI 일부 (스윙)를 업데이트해야합니다. 그러나 Observer 클래스에는 update() 메서드가 하나만 구현되어 있습니다.

notifyObservers() 메서드에 뭔가를 전달했지만 그 다음 인수를 update()에서 확인할 수는 있지만 좋은 방법이라고 생각하지 않습니다. 그랬다해도, 나는 무엇을 통과해야합니까? 액션/메소드에 대한 짧은 설명이 포함 된 문자열입니까? 액션/메소드 코드와 같은 int인가? 다른 것?

이 상황을 처리하는 가장 좋은 방법은 무엇입니까?

답변

7

일반적으로 update()를 호출 할 때 관찰 가능 상태에서 모든 것을 업데이트해야합니다. 실용적이지 않으면 notifyObservers()에 힌트를 전달할 수 있습니다.

관찰자 패턴의 결과 중 하나라고 말한다 갱의-책 :. 관찰자가 서로의 존재에 대한 지식이 없기 때문에

"예기치 업데이트, 그들은 변화의 궁극적 인 비용에 장님이 될 수 있습니다 주체에 대한 무해한 조작으로 인해 관찰자 및 종속 객체에 대한 업데이트가 연속적으로 발생할 수 있으며 잘 정의되거나 유지 관리되지 않은 종속성 기준은 대개 가짜 업데이트로 이어져 추적하기가 어려울 수 있습니다.

이 문제는 간단한 업데이트 프로토콜이 주체에서 변경된 내용에 대한 세부 정보를 제공하지 않음으로 인해 악화됩니다. 추가 프로토콜을 사용하지 않으면 관찰자가 무엇이 바뀌 었는지 발견 할 수있게 도와 주며, 변화를 추론하기 위해 열심히 노력해야 할 수도 있습니다. " 도 구현 중임 : 그들은

"관찰자 특정 업데이트 프로토콜 피하기 : 푸시 및 당김 모델. 옵서버 패턴의 구현은 종종 주제에 변화에 대한 추가 정보를 방송하게합니다. 주체는이 정보를 Update의 인수로 전달합니다. 정보의 양은 크게 다를 수 있습니다.

푸시 모델이라고 부르는 한 극단에서 피사체는 관찰자에게 변경 사항에 대한 자세한 정보를 전달합니다. 원하는지 여부는 관계 없습니다. 다른 극단에서는 pull model이 있습니다. 주체는 가장 최소한의 통지만을 보내고, 관찰자는 그 이후에 명시 적으로 세부 사항을 요구한다.

푸시 모델은 피험자의 관찰자에 대한 무지 함을 강조하는 반면, 푸시 모델은 피험자가 관찰자의 필요에 대해 무언가를 알고 있다고 가정합니다. 주제 클래스는 Observer 클래스에 대해 항상 사실 일 수는 없다는 가정을하기 때문에 밀어 넣기 모델은 관찰자의 재사용을 줄입니다. 반면 Observer 클래스는 Subject의 도움없이 변경된 사항을 확인해야하므로 pull 모델은 비효율적 일 수 있습니다. "

3

update()의 두 번째 매개 변수는 Object 유형이므로 적절한 항목을 전달할 수 있습니다. 주목할 때, 접근법은 다소 일반적입니다. 대조적으로, EventListenerList을 유지하는 클래스는 지정된대로 사용될 때 어느 정도 런타임 유형 안전을 얻을 수 있습니다.

관련 문제