728x90
반응형
Visitor Pattern : 방문자 패턴을 이용해 객체(클래스) 에서 처리(메소드)와 분리해서 사용한다.

VisitableElemenr 는 visitor 를 받아들이는 메소드만 구현함 (간단)
public interface Visitor {
public void visit(Visitable visitable);
}
public interface Visitable {
public void accept(Visitor visitor);
}
visitor 는 방문 해야하고
visitorable visitor 를 accpet 해야함.
public class VisitableA implements Visitable {
int numberOfMember;
public VisitableA(int numberOfMember) {
this.numberOfMember = numberOfMember;
}
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
visitor가 왔을때 visitor 에 visit 함수를 호출함 자기자신을 같이 넘겨줌
public class VisitorA implements Visitor {
private int number;
public VisitorA() {
this.number = 0;
}
@Override
public void visit(Visitable visitable) { // accept에서 넘어온 애들
if(visitable instanceof VisitableA){ // 방문을 하면 number 를 더해준다.
number+=((VisitableA) visitable).numberOfMember;
}else {
//...
}
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
}
반응형
댓글