프런트엔드/디자인 패턴

[11일차] 방문자 | 행동 패턴 11일만에 끝내기 챌린지 - GoF 디자인 패턴

조드래곤나인 2023. 7. 16. 15:13

 

출처: 에릭 감마 , 리처드 헬름 , 랄프 존슨 , 존 블리시디스. 『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