클래스 A에는 일련의 핸들러가 있습니다. 이벤트가 발생하면 클래스 B의 다른 스레드가 클래스 A의 해당 처리기를 호출합니다 (클래스 B는 A 관찰자 관찰 가능 클래스에 대한 참조를가집니다). A 클래스의 상응하는 메소드에서 이벤트를 처리 할 때, 결국 이벤트는 eventListener (클래스 C는 나에 의해 생성되지 않음)로 발생합니다. 제 질문은 다음과 같습니다 : eventListeners (나에 의해 구현되지 않음) 역할을하는 클래스에서 클래스 A의 처리 메서드를 "숨기고"클래스 B에만 "가시적/가시적"이 될 수있는 패턴이 있습니까? 내가 구현하는)?제 3 자 클래스에서 메소드를 숨기는 Java/패턴
원래 질문을 수정 중입니다. 방법과 처리기가 많이 나는 약
public class Csystem()
{
private AListener listener;//implements an event listener (the class C in my question)
//some methods here
public void handleEventIncoming(Event e){
//Do some logic here
listener.raiseEvent(e);
}
public void handleEventOutgoing(Event e); etc
}
CSystem을 이야기하고있다 내가 가진 클래스 Csystem은 본질적으로 내 코드에 다른 구성 요소의 다른 개발자를위한 인터페이스입니다 클래스입니다. 다른 개발자는 AListener 클래스 (클래스 A)의 자체 버전을 작성하고 코드에 Csystem을 사용합니다. 이벤트가 어딘가에 발생할 때마다 클래스 B는 CSystem
의 이벤트 핸들러에 이벤트를 전달합니다 (예를 들어, 네트워크에 메시지가 도착)public class Dispatch{
//This is class B
private CSystem s;
private void event_occured(Event e)
{
s.handleEventIncoming(e);
}
}
} 내 문제는 모두 (나에 의해 구현) 클래스 파견 및 클래스 AListener "참조하십시오"CSystem의 동일한 인터페이스. 나는 Alistener를 구현하는 개발자가 CSystem의 다른 뷰를보고 "볼"수 있고 공개 메서드 만 사용할 수 있기를 바랍니다. 나는 누군가가 실제로 사용할 수없는 방법을 (핸들러는 운영자에 의해서만 사용되는 의미가 있음) 보는 것은 좋은 생각이라고 생각하지 않는다. 이것을 달성하기위한 패턴이 있는가?
감사합니다.
안녕하세요, 다음을 의미합니까? 공용 클래스 B { 인터페이스 처리기 { public void handleEv1(); public void handleEv1(); } 등 } 클래스 A는 처리기를 구현합니다. { public void handleEv1(); public void handleEv1(); 등 } 하지만이 디자인으로 공개 된 이후 여전히 C에서 액세스 할 수있는 핸들러가 아닙니까? 아니면 내가하는 말을 오해하니? – akmer
그러나 A가 이벤트를 C로 보내고 C가 A에 대해 아무것도 모르고, A가 작성되기 훨씬 전에 컴파일되었으므로 anA.myMethod()에 대해 알고있는 코드가 C에 없을 수 있습니다. – djna
답장을 보내 주셔서 감사합니다. 내 문제는 다음과 같다. (내 생각이 틀릴 수도있다.) 나는 클래스 B와 클래스 C 사이의 경계 역할을하는 클래스 A를 가지고있다. 클래스 A는 클래스 C가 리스너로 등록되어있다. 클래스 B는 이벤트가 발생하면 A의 handlerMethods를 호출하고 메서드는 일부 처리를 수행하고 이벤트를 C로 발생시킵니다. 그러나 A의 처리기 메서드는 public입니다. A는 구현하지 않은 코드에 대한 인터페이스로 사용되며 핸들러 메소드에 private 범위가 있으면 C가 클래스 A의 핸들러를 호출 할 수없는 경우 더 선호합니다. 그렇다면이 클래스를 어떻게 다시 디자인해야합니까? 감사! – akmer