디자인 패턴-방문자 패턴
Visitor 패턴에서는 요소 클래스의 실행 알고리즘을 변경하는 방문자 클래스를 사용합니다. 이와 같이 요소의 실행 알고리즘은 방문자의 변화에 따라 달라질 수 있습니다. 이 패턴은 행동 패턴 범주에 속합니다. 패턴에 따라 요소 개체는 방문자 개체가 요소 개체에 대한 작업을 처리하도록 방문자 개체를 수락해야합니다.
이행
수락 운영을 정의 하는 ComputerPart 인터페이스 를 만들 것 입니다. Keyboard , Mouse , Monitor 및 Computer 는 ComputerPart 인터페이스를 구현하는 구체적인 클래스 입니다. 방문자 클래스 작업을 정의 할 다른 인터페이스 ComputerPartVisitor 를 정의합니다. 컴퓨터 는 구체적인 방문자를 사용하여 해당 작업을 수행합니다.
데모 클래스 인 VisitorPatternDemo 는 Computer 및 ComputerPartVisitor 클래스를 사용하여 방문자 패턴 사용을 보여줍니다.
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.