본문 바로가기
Spring/DesighPattern

GOF패턴 - Visitor Pattern(행위)

by windy7271 2023. 3. 22.
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;
    }
}

 

 

 

 

 

반응형

댓글