Skip to content

방문자 패턴은 알고리즘을 객체 구조에서 분리시키는 디자인 패턴이다. 기존 클래스 필드 정보를 유지하면서 새로운 연산을 추가하는 방식 중 하나이다. 비슷한 동작을 수행하는 로직을 Visitor 객체에 모을 수 있기 때문에 코드를 유지보수하기 좋지만, Element와 Visitor 간의 결합도가 상승한다는 단점이 있다.


예시 코드

public interface Element {
void visit(Visitor visitor);
}
public class ElementA implements Element{
@Override
public void visit(Visitor visitor) {
visitor.visit(this);
}
}
public class ElementB implements Element{
@Override
public void visit(Visitor visitor) {
visitor.visit(this);
}
}

Visitor라는 클래스에 visit할 수 있는 두개의 Element를 만들었다.


public class Visitor {
public void visit(ElementA element) {
System.out.println("ElementA가 방문함");
}
public void visit(ElementB element) {
System.out.println("ElementB가 방문함");
}
}

어떤 Element가 방문했는지에 따라 다른 동작을 수행한다. (오버로딩)

링크로 가면 코드를 볼 수 있다.