![](https://blog.kakaocdn.net/dn/qRb0K/btsnFFl2gEO/e7Uo1TrzeuViMrJcXoqGxK/img.png)
출처: 에릭 감마 , 리처드 헬름 , 랄프 존슨 , 존 블리시디스. 『Gof의 디자인 패턴』. 김정아(역). 프로텍미디어, 2015.
[11일차] 방문자(Visitor)
행동 패턴 11일만에 끝내기 챌린지 - GoF 디자인 패턴
타입스크립트로 설명하는 GoF 디자인 패턴의 행동 패턴 11일만에 끝내기 챌린지
방문자란?
객체 구조를 이루는 원소에 대해 수행할 연산을 표현하는 패턴으로,
연산을 적용할 원소의 클래스를 변경하지 않고도
새로운 연산을 정의할 수 있게 한다.
활용성
객체 구조를 정의한 클래스는 거의 변하지 않지만,
전체 구조에 걸쳐 새로운 연산을 추가하고 싶을 때
구조 및 구현
interface ElementClass {
accept(visitor: Visitor): void
}
class ConcreteElementA implements ElementClass {
accept(visitor: Visitor) {
visitor.visitConcreteElementA(this)
}
operationA() {
console.log('ConcreteElementA')
}
}
class ConcreteElementB implements ElementClass {
accept(visitor: Visitor) {
visitor.visitConcreteElementB(this)
}
operationB() {
console.log('ConcreteElementB')
}
}
interface Visitor {
visitConcreteElementA(element: ElementClass): void
visitConcreteElementB(element: ElementClass): void
}
class ConcreteVisitor implements Visitor {
visitConcreteElementA(element: ConcreteElementA) {
element.operationA()
}
visitConcreteElementB(element: ConcreteElementB) {
element.operationB()
}
}
class Main {
constructor() {
const visitor = new ConcreteVisitor()
const elementA = new ConcreteElementA()
const elementB = new ConcreteElementB()
elementA.accept(visitor) // ConcreteElementA
elementB.accept(visitor) // ConcreteElementB
}
}
공식 기술블로그 링크
728x90
'프런트엔드 > 디자인 패턴' 카테고리의 다른 글
Proxy, Reverse Proxy, Load Balancer 의 차이 (0) | 2024.01.03 |
---|---|
[10일차] 탬플릿 메소드 | 행동 패턴 11일만에 끝내기 챌린지 - GoF 디자인 패턴 (0) | 2023.07.16 |
[9일차] 전략 | 행동 패턴 11일만에 끝내기 챌린지 - GoF 디자인 패턴 (0) | 2023.07.16 |
[8일차] 상태 | 행동 패턴 11일만에 끝내기 챌린지 - GoF 디자인 패턴 (0) | 2023.07.16 |
[7일차] 옵저버 | 행동 패턴 11일만에 끝내기 챌린지 - GoF 디자인 패턴 (0) | 2023.07.16 |