디자인 패턴-방문자 패턴

Visitor 패턴에서는 요소 클래스의 실행 알고리즘을 변경하는 방문자 클래스를 사용합니다. 이와 같이 요소의 실행 알고리즘은 방문자의 변화에 ​​따라 달라질 수 있습니다. 이 패턴은 행동 패턴 범주에 속합니다. 패턴에 따라 요소 개체는 방문자 개체가 요소 개체에 대한 작업을 처리하도록 방문자 개체를 수락해야합니다.

이행

수락 운영을 정의 하는 ComputerPart 인터페이스 를 만들 것 입니다. Keyboard , Mouse , MonitorComputerComputerPart 인터페이스를 구현하는 구체적인 클래스 입니다. 방문자 클래스 작업을 정의 할 다른 인터페이스 ComputerPartVisitor 를 정의합니다. 컴퓨터 는 구체적인 방문자를 사용하여 해당 작업을 수행합니다.

데모 클래스 인 VisitorPatternDemoComputerComputerPartVisitor 클래스를 사용하여 방문자 패턴 사용을 보여줍니다.

1 단계

요소를 나타내는 인터페이스를 정의하십시오.

ComputerPart.java

public interface ComputerPart {
   public void accept(ComputerPartVisitor computerPartVisitor);
}

2 단계

위의 클래스를 확장하는 구체적인 클래스를 만듭니다.

Keyboard.java

public class Keyboard implements ComputerPart {

   @Override
   public void accept(ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit(this);
   }
}

Monitor.java

public class Monitor implements ComputerPart {

   @Override
   public void accept(ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit(this);
   }
}

Mouse.java

public class Mouse implements ComputerPart {

   @Override
   public void accept(ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit(this);
   }
}

Computer.java

public class Computer implements ComputerPart {
	
   ComputerPart[] parts;

   public Computer(){
      parts = new ComputerPart[] {new Mouse(), new Keyboard(), new Monitor()};		
   } 


   @Override
   public void accept(ComputerPartVisitor computerPartVisitor) {
      for (int i = 0; i < parts.length; i++) {
         parts[i].accept(computerPartVisitor);
      }
      computerPartVisitor.visit(this);
   }
}

3 단계

방문자를 나타내는 인터페이스를 정의하십시오.

ComputerPartVisitor.java

public interface ComputerPartVisitor {
	public void visit(Computer computer);
	public void visit(Mouse mouse);
	public void visit(Keyboard keyboard);
	public void visit(Monitor monitor);
}

4 단계

위의 클래스를 구현하는 구체적인 방문자를 만듭니다.

ComputerPartDisplayVisitor.java

public class ComputerPartDisplayVisitor implements ComputerPartVisitor {

   @Override
   public void visit(Computer computer) {
      System.out.println("Displaying Computer.");
   }

   @Override
   public void visit(Mouse mouse) {
      System.out.println("Displaying Mouse.");
   }

   @Override
   public void visit(Keyboard keyboard) {
      System.out.println("Displaying Keyboard.");
   }

   @Override
   public void visit(Monitor monitor) {
      System.out.println("Displaying Monitor.");
   }
}

5 단계

ComputerPartDisplayVisitor 를 사용하여 컴퓨터의 일부를 표시 합니다 .

VisitorPatternDemo.java

public class VisitorPatternDemo {
   public static void main(String[] args) {

      ComputerPart computer = new Computer();
      computer.accept(new ComputerPartDisplayVisitor());
   }
}

6 단계

출력을 확인하십시오.

Displaying Mouse.
Displaying Keyboard.
Displaying Monitor.
Displaying Computer.