2011-10-16 5 views
0

개체 A와 B가 서로 메시지를 보내고받을 필요가 있습니다. 예를 들어두 개체 사이에서 메시지 보내기

: 그 다음 응답 같이 다른 메시지를 전송하여

내가 클릭, 이것은 B. B에게 메시지를 보낼 수있는 원인이 뭔가를 않습니다.

지금 가지고있는 방식은 A는 B *를 가지고 B는 A *를 가지고 있으며 서로 통신하기 위해 서로의 sendMessageTo 메서드를 호출합니다.

이런 종류의 일을하는 더 좋은 방법이 있습니까?

기본적으로 서버는 메시지를 보내거나 로컬 게임에서 다형성 조정자가 가져 오는 메시지를 전송합니다. 조정자는 서버 또는 로컬 게임에서 메시지를 가져옵니다. 중재자는 그것을 클라이언트와 함께 전달합니다. 아이디어는 중재자가 클라이언트를위한 논리를 수행해서는 안되며 메시지 전달이기 때문입니다.

+3

왜'SendMessage' 귀찮게? 객체에 직접 메서드를 호출하지 않는 이유는 무엇입니까? 이 스레드는 다중 스레드입니까? 단일 스레드의 모든 내용은 순차적으로 수행됩니다. – tenfour

+0

B는 추상 네트워킹의 중재자입니다 (봇과 멀티 플레이를 가진 싱글 플레이어와 사람을 연결하는 멀티 플레이어) – jmasterx

답변

3

나는 Listener/Observer 패턴을 구현해야한다고 생각한다. 위키 백과에서 :

관찰자 패턴 (발행/구독 패턴의 부분 집합), 객체가 주체라고하는 소프트웨어 디자인 패턴의 부양라는 관찰자의 목록을 유지하고, 자동으로 통지 일반적으로 자신의 방법 중 하나를 호출하여 모든 상태 변경 사항을 확인합니다. 주로 분산 이벤트 처리 시스템을 구현하는 데 사용됩니다. 더 타이밍에서

:

http://en.wikipedia.org/wiki/Observer_pattern

http://www.codeproject.com/KB/cpp/CppEvents.aspx

http://www.codeproject.com/KB/architecture/observer.aspx

+0

Observer 패턴을 구현하는 Boost.Signals2라는 Boost 라이브러리도 있습니다 : http://www.boost.org/doc/libs/ 1_47_0/doc/html/signals2.html Signals2를 사용하면 게시자에게 이벤트 트리거를 허용 할 수있는 신호에 호출 가능한 수신기를 연결할 수 있으며 모든 수신기를 호출합니다. 간단한 패턴이지만 Signals2에는 리스너 호출 가능 함수의 반환 값을 집계하는 것과 같은 몇 가지 멋진 기능뿐만 아니라 내장 된 스레드 안전 기능이 있습니다. – gred

+0

[활성 개체] (http://drdobbs.com/go-parallel/article/showArticle.jhtml?articleID=225700095)를 확인하십시오. – rlduffy