2010-05-05 5 views
3

옵저버 패턴? 어디에서 (내가 구글 알고 있지만 일부 개인 통찰력을 기대했다.) 자바에서이 예제를받을 수 있나요Java Inter Application Form 통신 옵저버 패턴

을 내 문제의 적절한 설명에에 : 내가 3 형태/창을

. "보드"는 응용 프로그램으로로드되는 기본 폼입니다.

"채팅"은 텍스트 채팅이 이루어지는 곳입니다.

"네트워크"는 네트워크 연결이 설정된 곳입니다.

저는 게임 (connect4)이 로컬에서 작동하며 네트워크 버전도 구현하고 싶습니다.

내 생각은 런타임 중에 네트워크 상태를 모니터링하고 현재 네트워크 상태의 채팅 및 보드 양식을 업데이트하고 네트워크에서 수신 된 데이터를 전달하는 Observer 패턴과 관련된 것일 수도 있습니다.

내 아이디어가 유효합니까? 또는 응용 프로그램 전체에서 네트워크 및 네트워크 상태 업데이트를 어떻게 설정해야합니까?

입력 해 주셔서 감사합니다.

board http://img39.imageshack.us/img39/5221/boardz.jpg

chat http://img691.imageshack.us/img691/3629/chatos.jpg

network http://img441.imageshack.us/img441/5906/networks.jpg

편집 : 하나라도 추천 할 수 자바 옵저버 패턴에 관한 책이있다?

답변

0

이 경우 채팅 및 게임 창이 옵서버로 간주됩니다. Observers (자바 API는 java.util.Observer에서 네이티브 Observer 패턴을 가지고 있지만 자신 만의 인터페이스를 구현할 수있다.)와 같은 인터페이스를 구현하고 채팅 및 보드 창에서 구현할 수있다. 당신처럼 보이게 할 수도 있습니다 :

public interface Observer 
{ 
public void postUpdate(String newData); 
} 

postUpdate는 관찰자의 모든 정의해야하는 함수이며, 이러한 클래스와 같이, 관찰자를 구현해야합니다 나중에 포함 할 다른 것을 모두 :

public class ChatWindow Implements Observer 
{ 
//bla bla bla 
} 

그런 다음, 네트워크 클래스, 당신은 그런

public void addObserver(Observer newObserver) 
{ 
//Do something here to add the new Observer to some list of Observers, maybe a 
//List<Observer> or something? 
} 

같은 방법을 할 것입니다, 초기화하는 동안, 당신은 개에서 addObserver 함수를 호출 할 할 것 ch Observer를보고 싶어하고, 네트워크 클래스에 몇 가지 로직을 가지고 postUpdate 함수를 호출하여 등록한 모든 사람들을 업데이트하십시오. 이 경우에는 마치 하나의 옵션 인 새로운 데이터를 포함하는 String을 보내려는 것처럼 행동했습니다. 또한 아무것도 전달하지 않고 업데이트가 발생했다는 알림으로 작동 할 수 있습니다.이 경우 네트워크에서 관심이있는 데이터가 변경되었는지 관찰자가 확인할 책임이 있습니다. 또는 네트워크에서 정확히 무엇이 업데이트되었는지 나타내는 데이터를 전달할 수 있으므로 클래스가 변경된 사항을 염두에 둘지 여부를 알 수 있습니다. 예를 들어, 유일한 변경 사항이 데이터를 채팅하는 경우 게임 보드가 신경 쓸 필요가 없습니다. , 그래서 그것은 다른 일을하는 것을 귀찮게하지 않을 것입니다).

도서 측면에서 헤드 우선 디자인 패턴을 조사하는 것이 가장 성공적 일 수 있습니다.

+0

감사합니다. 당신의 의견은 큰 도움이되었습니다. – iTEgg

1

관찰자 패턴은 Java의 이벤트 리스너라고도합니다. 당신은 그것도 검색하고 싶을 것입니다.

귀하의 아이디어는 유효하다고 생각되지만, 기술적 인 부분을 좀 더 깊이 파고들 필요가 있습니다. RMI, Caucho, HTTPInvoker를 사용하여 네트워크 통신을 구현하고 있습니까?

어쨌든 모든 플레이어에게 업데이트를 게시하려면 "서버"게임이 있어야합니다. 이는 폴링을 사용하거나 네트워크를 통해 객체를 전달하여 구현할 수 있습니다.

바로 여기 StackOverflow - check this onethat one also에 대한 몇 가지 좋은 참조가 있습니다. 그게 너를 가야 해.