visitor 예제

공용 인터페이스 라우터 . . . . . . . . . . . . .

. . . . . . . . . . . .

. 기본 공용 보이드 수락 (RouterVisitor v) { v.visit (이); // 이 순간이 라우터 } 다음의 유형입니다, 우리는 방문자의 UML 다이어그램과 실제 예제의 구현을 살펴해야합니다. 이 자습서에서는 행동 GoF 디자인 패턴 중 하나인 방문자를 소개합니다. accept() 메서드는 컨트롤 흐름을 발생하여 올바른 요소 하위 클래스를 찾습니다. 그런 다음 visit() 메서드가 호출되면 컨트롤 흐름이 올바른 방문자 하위 클래스로 벡터화됩니다. accept() 디스패치 와 방문() 디스패치는 이중 디스패치와 같습니다. 그의 주요 예. 직원-엔지니어-보스의 계층 구조가 있다고 가정합니다. 그들은 모두 정상적인 휴가 일 발생 정책을 즐길 수 있지만, 보스는 또한 “보너스”휴가 일 프로그램에 참여합니다.

따라서 클래스 보스의 인터페이스는 클래스 엔지니어의 인터페이스와 다릅니다. 복합조직과 같은 조직을 다형적으로 통과하고 조직의 남은 휴가 일수를 계산할 수는 없습니다. “방문자는 서로 다른 인터페이스를 가진 여러 클래스가 있고 이러한 클래스에서 데이터를 얻는 방법을 캡슐화하려는 경우 더 유용합니다.” Element 계층 구조의 각 콘크리트 파생 클래스는 전달된 방문자 계층구조의 구체적인 파생 인스턴스에서 visit() 메서드를 호출하기만 하면 accept() 메서드를 구현하고 “this” 포인터를 유일한 인수로 전달합니다. 자바프로 2000년 11월호에는 방문자 디자인 패턴에 대한 제임스 쿠퍼(GoF의 자바 동반자 저자)의 기사가 실이다. 그는 “객체 지향 모델의 테이블을 돌리고 다른 클래스의 데이터에 대해 작업하는 외부 클래스를 만듭니다. 이 부정 한 보일 수 있지만 … 그렇게 하는 데는 좋은 이유가 있습니다.” 방문자 디자인 패턴이 해결할 수 있는 문제는 무엇입니까? [2] 테스트 목적을 위해, VisitorDemoclass를 살펴 보자: 방문자 패턴에 대한 인정 된 이의는 기능 분해에 회귀를 나타내는 것입니다 – 데이터 구조에서 알고리즘을 분리. 이것은 합법적인 해석이지만, 아마도 더 나은 관점/근거는 비전통적인 동작을 전체 객체 상태로 승격시키는 목표일 것입니다.

방문자 패턴은 개체 구조가 작동하는 클래스를 변경하지 않고 개체 구조의 요소에서 수행할 작업을 나타냅니다. 이 패턴은 택시 회사의 운영에서 관찰 될 수있다. 사람이 택시 회사에 전화하면 (방문자를 수락), 회사는 고객에게 택시를 배부합니다. 택시를 입력하면 고객, 또는 방문자는 더 이상 자신의 교통수단을 통제할 수 없으며, 택시(운전자)는 택시입니다.

This entry was posted in Uncategorized by admin. Bookmark the permalink.

Comments are closed.