Latest web development tutorials

방문자 패턴

방문자 패턴 (Visitor 패턴)에서는 방문자 클래스는, 그것이 실행 알고리즘 소자 클래스 변경 사용한다. 이러한 방식으로, 알고리즘의 구현 방문자 요소가 변경 될 수있다. 디자인 패턴이 유형의 행동 패턴에 속한다. 방문자가 요소 개체를 운영 개체를 처리 할 수 ​​있도록 패턴에 따르면, 요소 객체는 대상 방문자를 수락했습니다.

소개

의도 : 데이터 및 데이터 조작 분리의 주요 구조.

주로 해결 : 안정적인 데이터 구조 및 변수 운영 커플 링 문제를.

때 사용하는 : 많은 다른과 관련이없는 행동 개체의 대상 구조의필요성을하지만, 이러한 작업이 개체의 클래스, 클래스에이 패키지에 방문자의 사용 "오염"을 방지 할 필요가있다.

클래스 내부에 액세스 플러스 외국인 관광객의 수신 인터페이스를 제공하기 위해어떻게 해결하는.

키 코드 : 방문자를 수용하는 방법을 갖는 데이터베이스 클래스 자체 들어오는 방문자 참조.

응용 예 : 당신은 친구의 집에 손님, 당신은 방문자이며, 친구는 친구의 설명을 통해 방문, 방문자 패턴 인 판단을 만들 수있는 친구의 다음 설명을 받아들입니다.

장점 : 1, 단일 책임 원칙에 부합한다.2, 우수한 확장 성을 제공합니다. 3, 유연성을 제공합니다.

단점 : 1, 방문자의 특정 요소는 데메테르의 원칙 위반의 세부 사항을 발표했다.이 변화의 특정 요소 더 어렵다. 도 3은 의존성 반전 원칙에 위반 추상화에 의존하지 않는 특정 클래스에 의존한다.

사용 시나리오 : 1, 오브젝트 클래스 구조에 대응하는 물체는 거의 변화하지 않지만 종종 오브젝트 구조의 새로운 동작을 정의 할 필요가있다.2, 많은 다른과 관련이없는 행동에 개체의 대상 구조가 필요하지만, 이러한 작업이 개체의 클래스의 "오염"을 방지하기 위해 필요, 우리는 당신이 새로운 작업을 추가 할 때 이러한 클래스를 수정하지 않습니다.

참고 : 방문자 기능을 통합 할 수 있습니다, 보고서, UI, 차단 및 필터링을 수행 할 수 있습니다.

실현

우리는 허용 조작ComputerPart 인터페이스의정의를 생성합니다.키보드,마우스, 모니터컴퓨터엔티티 클래스ComputerPart 인터페이스를얻을 수 있습니다. 우리는 방문자에게 작업 유형을 정의하는 또 다른 인터페이스ComputerPartVisitor를정의합니다.컴퓨터는적절한 조치를 취할 법인 방문자를 사용합니다.

VisitorPatternDemo,우리는 방문자 패턴의 사용을 설명하기위한 클래스컴퓨터ComputerPartVisitor 클래스의 사용을 입증한다.

Visitor 패턴 UML 다이어그램

1 단계

요소를 나타내고있는 인터페이스를 정의한다.

ComputerPart.java

공용 인터페이스 클래스 ComputerPart {
   공공 무효 (ComputerPartVisitor computerPartVisitor)에 동의;
}

2 단계

클래스 위의 엔티티 클래스를 확장 만듭니다.

Keyboard.java

공용 클래스 키보드 ComputerPart을 {구현

   @Override
   공공 무효 (ComputerPartVisitor computerPartVisitor)을 채택 {
      computerPartVisitor.visit (이에게);
   }
}

Monitor.java

공용 클래스 모니터는 ComputerPart을 {구현

   @Override
   공공 무효 (ComputerPartVisitor computerPartVisitor)을 채택 {
      computerPartVisitor.visit (이에게);
   }
}

Mouse.java

공용 클래스 마우스 ComputerPart을 {구현

   @Override
   공공 무효 (ComputerPartVisitor computerPartVisitor)을 채택 {
      computerPartVisitor.visit (이에게);
   }
}

Computer.java

공용 클래스 컴퓨터 ComputerPart을 {구현
	
   ComputerPart [] 부분;

   공용 컴퓨터 () {
      부품 = 새 ComputerPart [] {새로운 마우스 (), 새로운 키보드 (), 새로운 모니터 ()};		
   } 


   @Override
   공공 무효 (ComputerPartVisitor computerPartVisitor)을 채택 {
      대한 (INT 나는 = 0; 나는 <parts.length, 내가 ++) {
         부품 [I] .accept (computerPartVisitor);
      }
      computerPartVisitor.visit (이에게);
   }
}

3 단계

표현의 방문자 인터페이스를 정의합니다.

ComputerPartVisitor.java

공용 인터페이스 ComputerPartVisitor {
	공공 무효 방문 (컴퓨터 시스템);
	공공 무효 방문 (마우스 마우스);
	공공 무효 방문 (키보드 키보드);
	공공 무효 방문 (모니터 모니터)
}

4 단계

방문자 엔티티는 상술 된 클래스를 달성하기 위해 만들어.

ComputerPartDisplayVisitor.java

공용 클래스 ComputerPartDisplayVisitor는 ComputerPartVisitor을 {구현

   @Override
   공공 무효 방문 (컴퓨터 시스템) {
      에서 System.out.println ( "컴퓨터를 표시.");
   }

   @Override
   공공 무효 방문 (마우스 마우스) {
      에서 System.out.println는 ( "마우스를 표시.");
   }

   @Override
   공공 무효 방문 (키보드 키보드) {
      에서 System.out.println ( "키보드를 표시.");
   }

   @Override
   공공 무효 방문 (모니터 모니터) {
      에서 System.out.println ( "모니터를 표시.");
   }
}

5 단계

컴퓨터의일부를 보여ComputerPartDisplayVisitor를 사용합니다.

VisitorPatternDemo.java

공용 클래스 VisitorPatternDemo {
   공공 정적 무효 메인 (문자열 []에 args) {

      ComputerPart 컴퓨터 = 새로운 컴퓨터 ();
      computer.accept (새 ComputerPartDisplayVisitor ());
   }
}

6 단계

출력을 확인합니다.

마우스를 표시.
키보드 표시.
모니터를 표시.
컴퓨터를 표시.