☆Strategy(전략가) 패턴 - 그때그때 상황에 맞게 갈아 끼울 수 있는 패턴 ★
. 하나의 패턴으로 여러가지 방식을 모두 실행 해 볼 수 있다.
. 커맨드패턴은 객체를 갈아낄수 없지만. 전략가 패턴은 갈아끼울 수있다.
. 여러가지 방식을 갈아껴서 실행하고 싶을 때 사용하면 좋습니다.
. 하나의 문제사항을 다양한 알고리즘으로 풀어서 처리하는 속도(비용)을 비교할 수 있다.
// Strategy(전략가) 패턴은 생성자에서 셋팅 및 수행을 하지 않음..
class StrategyRunner {
constructor() {}
// Setter함수를 통해서 전략을 설정 후
setStrategy(strat) {
this.strategy = strat;
}
// 해당 전략에 대한 실행부는 따로 분리가되어있음..
run() {
this.strategy.run();
}
}
class BusStrategy {
run() {
console.log("Bus로 이동~~~~!");
}
}
class WalkStrategy {
run() {
console.log("걸어서 이동~~~~!");
}
}
// 전략가 패턴을 사용한 유연한 방법.
const s = new StrategyRunner();
s.setStrategy(new BusStrategy());
s.run(); // Bus전략의 Run수행.
s.setStrategy(new WalkStrategy());
s.run(); // Walk전략의 run수행.
☆Observer(옵저버) 패턴 - 완성여부를 반복확인하기 어려우니, 완성시 통보받는 패턴 ★
. A(구매자)는 check라는 함수로 B(제공자)가 다 만들었는 지 확인한다. (완성 시, getItem() 함수로 결과를 가져온다. )
. B(제공자)가 만들지 않았다면 만들 때 까지 계속 물어봐야 되는 단점이 있다.
. B(제공자)가 늦게 만들면 만들수록 계속 물어봐야되기 때문에 시간낭비가 될 수있다.
class A {
check(b) {
if (b.finished()) {
return b.getItem();
}
return false;
}
}
class B {
item = null;
finished() {
return !!this.item;
}
getItem() {
return this.item;
}
}
const b = new B();
const a = new A();
while (!a.check(b)) {}
. 주기적으로 자꾸 다 됐냐고 물어보는게 아니라 다되면 알려주세요 하는게 옵저버패턴..
옵저버패턴으로 변경 시 아래와 같이 코드가 변경 될 수 있다..
'Study' 카테고리의 다른 글
[디자인패턴 - javascript] 파트1 (0) | 2024.10.23 |
---|---|
[ javascript && Python ] 알고리즘 챌린지 "Part4" (0) | 2023.03.03 |
[ javascript && Python ] 알고리즘 챌린지 "Part3" (0) | 2023.02.13 |
[ javascript && Python ] 알고리즘 챌린지 "Part2" (0) | 2023.01.29 |
[ javascript && Python ] 알고리즘 챌린지 "Part1" (0) | 2023.01.17 |