2014-12-13 5 views
1

UML diagram on wikipedia에서 프록시 클래스와 제목 클래스는 동일한 인터페이스를 구현합니다.프록시 패턴에 상속이 필요한 이유는 무엇입니까?

내가 아는 바로는 프록시 클래스의 목적은 위임입니다. 이것은 합성을 통해 할 수 있습니다. 위임 된 클래스는 동일한 인터페이스를 구현할 필요가 없습니다.

해당 클래스가 프록시 클래스와 동일한 인터페이스를 구현해야하는 이유가 있습니까?

답변

3

해당 클래스가 프록시 클래스와 동일한 인터페이스를 구현해야하는 이유가 있습니까?

네하지만 프록시 주변의 다른 방법은 주제

클라이언트가 사용중인 인스턴스가 프록시 실현하지 않는 한 동일한 인터페이스를 구현해야입니다! 클라이언트는 그것이라고 생각합니다. Subject

+0

이것은 공장이 관련되어있는 경우에만 가치가 있습니까? 클라이언트가 주제를 사용 중이고 나중에 프록시를 대신 사용하려면 어떻게해야합니까? (반대의 경우도 마찬가지 임). – neverendingqs

+0

"Client"가 어떤 구현인지 알지 못하게하려면 클라이언트에'Subject' 인스턴스 (프록시 또는 실제 주체)를 제공해야합니다. 이 작업은 팩토리 패턴을 통해 수행 할 수 있지만 생성자 또는 메서드 호출을 통해 종속성을 주입 할 수도 있습니다. – dkatzel

+0

클라이언트가 해당 패턴보다 먼저 주제를 사용하는 경우 프록시 패턴의 주제 추상화 (이전 주제와 거의 유사 함)를 사용하도록 클라이언트를 수정해야합니다. 그런 다음 클라이언트는 주제 또는 프록시와 대화하고 있는지 여부를 알지 못합니다. – Fuhrmanator

1

프록시와 제목은 동일한 작업 집합을 제공해야합니다. 클라이언트는 요청 된 인스턴스, 프록시 또는 주제를 인식 할 수 없습니다. 그것은 그것을 위해 숨겨져 있습니다. 이 때문에 두 클래스 모두 동일한 인터페이스를 구현합니다.

1

그러면 어댑터 (및 개체 어댑터, Gang of Four 서적의 용어를 사용하는 것과 유사합니다). 어댑터는 일반적으로 나중에 인터페이스 적응이 필요한 프로젝트에서 발견 할 때 사용됩니다. 당신은 프락시를 선전이라고 생각합니다.

이유는 프록시가 클라이언트에게 투명해야한다는 것입니다. 프록시가 주체와 다른 인터페이스를 갖는다면이 투명성은 깨질 것입니다. 모든 주제가 프록시 될 필요가없는 유스 케이스를 생각해보십시오. 모든 객체가 '원격'은 아닙니다.

+0

이 질문을 통해 차이점을 이해하는 데 도움이되었다고 생각합니다. http://stackoverflow.com/questions/350404/how-do-the-proxy-decorator-adapter-and-bridge-patterns-differ – neverendingqs

관련 문제