2012-10-29 4 views
2

두 인터페이스 모두에 인터페이스 A와 B가 있습니다. 이제 클래스 A는 인터페이스 Z (Z.f1, Z.f2, Z. F3는, ...)는 클래스 B.Java에서 동일한 인터페이스를 사용하는 다른 클래스에 대한 Dispatched 함수 호출

public class A implements Z{ 

private B b; //instantiated in constructor of A 

@Override 
public String f1(int p) 
{ 
    return b.f1(p); 
} 
... 

자바에서이 작업을 수행하는 일반적인 방법이 있나요의 객체에 디스패처로 작동?

+0

"제네릭"의 의미를 모릅니다. 이미 A (외관)가 요청을 전달해야하는 구현 (B)에 대한 참조를 얻는 패턴을 얻었습니다. 당신을 위해 파견 방법을 생성 할 것을 요청하고 있습니까? –

+0

예, 가능합니다. 인터페이스 Z는 약 50 가지의 메소드를 가지고 있으며, 대부분의 경우 A의 인스턴스를 B의 인스턴스로 보내고 싶습니다. IDE에서 생성 된 스텁이나 s.th.에 붙여 넣을 수있는 코드 스 니펫이 될 수 있습니다. 반사? – mav

답변

0

f1() 인터페이스가 Z 인터페이스에 선언되어있는 경우 구현하려는 패턴을 래퍼 또는 데코레이터라고합니다.

java에서는 Java 1.4에 도입 된 동적 프록시를 사용하여 일반 구현을 만들 수 있습니다.

+0

1 StackOverflow 포인트를 가진 누군가가 동적 프록시를 처리하려고하는지 확신하지 못합니다. :-) 그들을 사용하는 방법에 대한 정말 좋은, 간단한 튜토리얼이 있습니까? – user949300

+0

팁을 주셔서 감사합니다. @ user949300 일반적으로 Java 또는 SW 개발이 아니라 stackoverflow를 처음 사용합니다. http://java.dzone.com/articles/power-proxies-java는 좋은 개요처럼 보입니다. – mav

+0

행운을 빌어 고맙습니다. – user949300

0

나는 그렇게 생각하지 않는다. 그러나 때때로 IDE는 호출을 위임하는 모든 간단한 메소드를 작성하는 데 도움을 줄 수 있습니다. 그리고 때로는 이것을하기 위해 제 3의 부분 수업을 찾을 수 있습니다. 예를 들어, Guava (http://code.google.com/p/guava-libraries/)에는 많은 ForwardingXXX 클래스가 있으며, 기본적으로 모든 항목을 다른 항목에 위임합니다. 예를 들어 ForwardingMap은 모든 호출을 다른 Map에 위임합니다. 위임하고 싶지 않은 메서드를 재정의해야합니다.

관련 문제