[디자인패턴] 방문자패턴(visitor pattern)

2016. 11. 23. 14:13프로그래밍/디자인패턴

    목차

방문자패턴(visitor pattern)


알고리즘을 객체 구조에서 분리 시키는 패턴

멤버변수와 메서드를 다른 클래스로 분리하여 서로 간의 호출하게 함으로써 추후 메서드 추가를 자유롭게 한다


  작성형식



  내용


방문자 패턴은 컴포짓패턴과 같이 쓰는 경우가 많다. 위 사진에서 보면 좌측에 element를 구현하는 클래스를 다룰때 컴포짓 패턴을 이용하여 개별 객체와 그 객체들을 목록 형태로 가지고 있는 상위 객체를 구현하여 방문자 패턴을 구현하게 된다.

일반적인 경우에 OOP에서는 객체 안에 멤버변수와 메서드를 같이 작성 하도록 하지만 방문자 패턴에서는 변수와 메서드를 분리하여 작성 하도록 하고 있다. 이와 비슷한 패턴 형식으로는 전략패턴, 커맨드패턴등이 있다. 이 패턴들과 차이점은 전략 패턴은 하나의 객체에 대하여 여러 여러 동작을 하게 하고 커맨드 패턴은 하나의 객체에 하나의 동작 + 보조적인 동작 정도의 형태로 작성을 하게 되는 반면, 방문자 패턴은 여러 객체에 대해 여러 동작을 하도록 하는 방식이라는 것이다. 코드를 통해서 좀 더 알아 보도록 하자.


사진에 우측 Visitor interface에 해당하는 인터페이스. 어떤 일을 해야할지 목록을 정의하는 인터페이스로 생각하면 될 것 같다.


측 ConcreteVisitor를 구현한 클래스. CarElementVisitor에 정의한 각 행동들을 구체화한 코드 이다.


좌측 Element 인터페이스. 각 객체가 행동을 할 때 사용할 명칭을 정의.


좌측 ConcreteVisitor를 구현한 클래스. Wheel, Engine, Body가 개별 객체가 되고 Car 클래스가 개별 객체를 구성요소로 가지는 상위 대상 객체가 된다.  



  참조


https://github.com/parkgaram/java-designpattern

http://blog.naver.com/PostView.nhn?blogId=2feelus&logNo=220664244510&parentCategoryNo=&categoryNo=28&viewDate=&isShowPopularPosts=false&from=postView