
출처: 에릭 감마 , 리처드 헬름 , 랄프 존슨 , 존 블리시디스. 『Gof의 디자인 패턴』. 김정아(역). 프로텍미디어, 2015.
[9일차] 전략(Strategy)
행동 패턴 11일만에 끝내기 챌린지 - GoF 디자인 패턴
타입스크립트로 설명하는 GoF 디자인 패턴의 행동 패턴 11일만에 끝내기 챌린지
전략이란?
동일 계열의 알고리즘군을 정의하고,
각각의 알고리즘을 캡슐화하여,
이들을 상호교환이 가능하도록 만드는 패턴이다.
알고리즘을 사용하는 사용자와 상관없이
독립적으로 알고리즘을 다양하게 변경할 수 있게 한다.
활용성
1) 하나의 클래스가 많은 행동을 정의하고,
이런 행동들이 그 클래스의 연산안에서 복잡한 다중 조건문의 모습을 취할 때
2) 행동들이 조금씩 다를 뿐 개념적으로 관련된 많은 클래스들이 존재할 때
3) 알고리즘의 변형이 필요할 때
4) 사용자가 몰라야 하는 데이터를 사용하는 알고리즘이 있을 때
구조 및 구현
interface Strategy {
algorithmInterface(a: number, b: number): unknown
}
class Context {
private strategy: Strategy
constructor(strategy: Strategy) {
this.strategy = strategy
}
changeStrategy(strategy: Strategy) {
this.strategy = strategy
}
contextInterface() {
console.log(this.strategy.algorithmInterface(5, 5))
}
}
class ConcreteStrategyA implements Strategy {
algorithmInterface(a: number, b: number) {
return a * b
}
}
class ConcreteStrategyB implements Strategy {
algorithmInterface(a: number, b: number) {
return a + b
}
}
class ConcreteStrategyC implements Strategy {
algorithmInterface(a: number, b: number) {
return a - b
}
}
class Main {
constructor() {
const concreteStrategyA = new ConcreteStrategyA()
const concreteStrategyB = new ConcreteStrategyB()
const concreteStrategyC = new ConcreteStrategyC()
const context = new Context(concreteStrategyA)
context.contextInterface() // 25
context.changeStrategy(concreteStrategyB)
context.contextInterface() // 10
context.changeStrategy(concreteStrategyC)
context.contextInterface() // 0
}
}
공식 기술블로그 링크
728x90
'프런트엔드 > 디자인 패턴' 카테고리의 다른 글
[11일차] 방문자 | 행동 패턴 11일만에 끝내기 챌린지 - GoF 디자인 패턴 (0) | 2023.07.16 |
---|---|
[10일차] 탬플릿 메소드 | 행동 패턴 11일만에 끝내기 챌린지 - GoF 디자인 패턴 (0) | 2023.07.16 |
[8일차] 상태 | 행동 패턴 11일만에 끝내기 챌린지 - GoF 디자인 패턴 (0) | 2023.07.16 |
[7일차] 옵저버 | 행동 패턴 11일만에 끝내기 챌린지 - GoF 디자인 패턴 (0) | 2023.07.16 |
[6일차] 메멘토 | 행동 패턴 11일만에 끝내기 챌린지 - GoF 디자인 패턴 (0) | 2023.07.16 |