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 |