Visitor Pattern 방문자 패턴
행동 패턴으로, 알고리즘이 작동하는 객체와 알고리즘을 분리하는 패턴입니다. 방문자 객체가 알고리즘이 작동하는 객체의 알고리즘을 관리합니다.
Visitor Pattern 방문자 패턴이 적합한 경우
- 복잡한 객체 구조의 모든 요소에 대해 기능을 수행해야 하는 경우.
- 부수적인 비즈니스 로직을 정리해야 하는 경우
- 기능이 일부 클래스에서만 의미가 있고, 다른 클래스에서는 의미가 없을때.
장단점
장점
- 기존 객체를 수정하지 않고, 다른 객체와 함께 동작하는 기능을 추가할 수 있습니다. (개방폐쇄원칙)
- 같은 기능을 다양한 버전으로 관리할 수 있습니다. (단일책임원칙)
- 방문자 객체가 유용한 정보를 축적할 수 있습니다. 이 정보는 복잡한 객체 구조를 탐색하고, 이 구조의 각 객체에 방문자를 적용하는데 유용할 수 있습니다.
단점
- 클래스가 삭제되거나 추가될때마다 모든 방문자 객체를 수정해 줄 필요가 있습니다.
- 방문자 객체가 요소의 Private 필드나 메소드에 대한 접근 권한이 부족할 수 있습니다.
Visitor Pattern 방문자 패턴 구현
Visitor
public interface Visitor {
void visitSupermarket(Supermarket supermarket);
void visitSchool(School school);
}
BuildingVisitor
public class BuildingVisitor implements Visitor {
@Override
public void visitSupermarket(Supermarket supermarket) {
System.out.println("Visit Supermarket");
}
@Override
public void visitSchool(School school) {
System.out.println("Visit School");
}
}
Building
public interface Building {
void visit(Visitor visitor);
}
School
public class School implements Building{
@Override
public void visit(Visitor visitor) {
visitor.visitSchool(this);
}
}
Supermarket
public class Supermarket implements Building{
@Override
public void visit(Visitor visitor) {
visitor.visitSupermarket(this);
}
}
Main
public class Main {
public static void main(String[] args) {
BuildingVisitor visitor = new BuildingVisitor();
Supermarket supermarket = new Supermarket();
supermarket.visit(visitor);
School school = new School();
school.visit(visitor);
}
}
Visit Supermarket
Visit School
참조
'JAVA > DesignPattern' 카테고리의 다른 글
Design Pattern 디자인 패턴 Template Pattern 템플릿 패턴 (0) | 2021.12.31 |
---|---|
Design Pattern 디자인 패턴 Startegy Pattern 전략 패턴 (0) | 2021.12.30 |
Design Pattern 디자인 패턴 State Pattern 상태 패턴 (0) | 2021.12.29 |
Design Pattern 디자인 패턴 Observer Pattern 옵저버 패턴 (0) | 2021.12.28 |
Design Pattern 디자인 패턴 Memento Pattern 메멘토 패턴 (0) | 2021.12.27 |