우리는 GOF 디자인 패턴을 연구 중이며 위임의 처음 두 단락에서 차단됩니다. 우리는 표시된 단락에 설명 된 코드가 어떻게 생겼는지에 동의 할 수 없습니다. 이 구절GOF 위임 코드 예제를 작성할 수 있습니까?
답변
그러나 상속, 상속 작업은 항상
this
멤버 C에서 변수 ++과self
의를 통해 수신 객체를 참조 할 수 있습니다 잡담. 위임과 동일한 효과를 얻으려면 수신자가 자신을 대리자에게 전달하여 위임 된 작업이 수신자를 참조하도록합니다.
Quoting Wikipedia (강조 내)에서 위임
이 목적은 제 2 물체 (대리인)에 위임하여 요청을 처리한다. 대리자는 도우미 개체 인 이지만 원래 컨텍스트는입니다. 위임에 대한 언어 수준 지원을 사용하면 대리자의
self
이 대리자 (받는 개체)가 아니라 원본 (보내는) 개체를 참조하도록 함으로서 암시 적으로 수행됩니다. 실제로입니다self
또는this
또는current
또는caller
언어 특정 여부
. 코드는 사각형이지만 대리자가 윈도우 인스턴스의 컨텍스트 내에서 영역을 실행하기 때문에
Window
int width: 640
int height: 480
Rectangle rectangle: new Rectangle()
int Area(): rectangle.Area()
Rectangle
int Area(): self.width * self.height
Window window: new Window()
print window.Area()
이것은 640 × 480의 결과를 인쇄 할 것이다 : 그것은 위임을 지원하는 언어는 다음 작동한다고 말한다. 즉, Window의 너비와 높이를 self
까지 사용합니다. 이 자동 컨텍스트 통과를 지원하지 않는 언어에서
, 대신 대리인에게 발신자를 통과해야합니다 :
Window
int width: 640
int height: 480
Rectangle rectangle: new Rectangle()
int Area(): rectangle.Area(this)
Rectangle
int Area(context): context.width * context.height
Window window: new Window()
print window.Area()
우리가 (this
를 통해) 대리인에게 윈도우 인스턴스를 전달하는 Area()
를 호출 할 때. 그런 다음 대리자는 너비와 높이 멤버에 액세스하여 명시 적으로 전달 된 인수를 통해 계산을 수행합니다.
위의 가짜 언어는 유형이나 가시성과 같은 것에 대해 아무런 가정을하지 않으며 우리는 이처럼 Windows 인스턴스를 단순히 전달하고 그 멤버에 액세스 할 수 있다고 가정합니다. 사용 언어에 따라 마일리지가 다를 수 있습니다.
위임은 실제로 바인딩 컨텍스트에 관한 것이고 단순한 메서드 호출 전달에 관한 것이 아닙니다. 위키 피 디아의 페이지를 마지막으로 한 번 인용 :
"대표단은"종종 맥락에서 평가 보내는 목적은 단순히 수신 객체의 해당 멤버를 사용하여 전달의 독특한 개념을 참조하기 위해 느슨하게 사용하는 것으로원본 개체가 아니라 수신 개체의.
패턴에 관한 한 클래스 다이어그램은 Window와 Rectangle이라는 두 클래스를 잘 보여줍니다.
실제 책을 아직 갖고 있지 않은 경우 (다이어그램이없는 경우) 다이어그램을 설명하는 이전 장 중 하나를 읽으십시오. 아니면 내가 틀렸어. 그 책에 없지만 다음 다이어그램이 무엇인지, 어떻게 작동하는지 설명하는 다른 OOAD/OOP 서적을 구하십시오.
만약 이것이 가치가있다면 GoF도 마찬가지라고 생각합니다. 이것은 "상속에 대한 집계"에 관한 것이며, 그 자체로는 공감할만한 가치가 있습니다. 너의 모든 "우리"가 아직 없다면, 왜 그렇게하지 않겠습니까? 다르게 작성된 코드/개념을 가지고 몇 가지 구체적인 예를 들어 토론하십시오.
는 는도 참조 : 내 대답은 alredy 귀하의 질문에 대답하지 않는 경우
, 그것은 우리에게 도움이 될 것입니다 너희들 문제가 위치를 설명 할 수있는 경우 동의. 구현이 무엇이고 친구가 생각하는 것이 무엇이라고 생각합니까? – Gordon
이것은 패턴에 관한 요점 : 코드를 설명하지 않습니다. 그들은 다양한 방법/언어로 구현할 수있는 전략을 설명합니다. 코드에 대해 묻는 대신 구현에 대한 특정 질문이있는 것이 좋습니다. – Doleron