본문 바로가기

강의/Design pattern

방문자 (Visitior) 패턴

SMALL

Visitor Pattern

기존 코드를 건드리지 않고 새로운 패턴을 추가.


Code Example

Triangle

public class Triangle implements Shape {
  @Override
  public void printTo(Device device) {
    if(Device instanceof Phone) {
      //log
    } else if(device instanceof Watch) {
      //log
    }
  }
} 

Rectangle

public class Rectangle implements Shape {
  @Override
  public void printTo(Device device) {
    if(Device instanceof Phone) {
      //log
    } else if(device instanceof Watch) {
      //log
    }
  }
} 

Shape

public interface Shape {
  void printTo(Device device);
}

Code Example - 2

Circle

public class Circle implements Shape  {
  @Override
  public void accept(Device device) {
    device.print(this);
  }
}
  

Device

public interface Device {
  void print(Circle circle);
  void print(Rectangle rectangle);
  void print(Triangle triangle);
}

Phone

public class Phone implements Device {
  @Override
  public void print(Circle circle) {
    //log
  }
  @Override
  public void print(Triangle triangle) {
    //log
  }
  @Override
  public void print(Triangle Triangle) {
    //log
  }
}

Client

public class Client {
  public static void main(String[]] args) {
    Shape rectangle = new Rectangle();
    Deviece device = new Pad();
    rectangle.accept(device);
  }
} 

장단점

장점

  • 추가 코드에 대해 변경이 적다.

단점

  • 메소드 오버라이딩 시 세부 객체에 대한 메소드가 존재해야 한다.
  • 단일 책임의 원칙과 같은 부분이 깨질 수 있다.

Example

FileVisitor, SimpleFileVisitor

AnnotationValueVisitor

ElementVisitor

BeanDefinitionVisitor

SMALL

'강의 > Design pattern' 카테고리의 다른 글

템플릿 메소드 (Template method) 패턴  (0) 2022.09.22
전략(Strategy) 패턴  (0) 2022.09.22
상태(State) 패턴  (0) 2022.09.22
관찰자(Observer) 패턴  (0) 2022.09.22
중재자(Mediator) 패턴  (0) 2022.09.22