[TS] 지금 들을 수 없는 전략 모드
15748 단어 TypeScript초학자설계strategytech
개시하다
이번에는 전략 모델
Strategy Pattern
에 대해 설명한다.다태성을 이용해 각기 다른 행동을 할 때 편리하게 도형을 디자인하고자 합니다.
전략 모드란?
유명한 곳에는
TECHSCORE
선생의 해설이 있다.일반적으로 프로그래밍을 하면 방법에 융합된 형식으로 알고리즘을 실현하곤 한다.if문장 등을 통해 알고리즘을 수정합니다.스트래티지 모드에서는 전략적인 부분을 의식적으로 학급별로 제작한다.전략x부분은 서로 다른 유형으로 제작되며, 전략을 변경하고 싶으면 이용하는 전략류의 방법으로 대응한다.Strategy 모델을 활용하여 방법에 융합된 형식의 알고리즘보다 더욱 유연하고 유지 보수가 쉬운 디자인입니다.
예제
다음 놀이공원 표가 있다고 가정해 보세요.
정책 모드 없음
예제의 내용에 대해 어떤 디자인 모델도 특별히 신경 쓰지 않고 인코딩을 하면 다음과 같이 될 것 같다.
class Ticket {
// 種別
private _type: 'Adult' | 'Child' | 'Pair';
constructor(type: 'Adult' | 'Child' | 'Pair' ) {
this._type = type;
}
// 価格を取得
public getPrice(): number {
switch(this._type) {
case 'Adult':
return 3000;
break;
case 'Child':
return 1000;
break;
case 'Pair':
return 5000;
break;
}
}
// 利用人数を取得
public getUserCount(): number {
switch(this._type) {
case 'Adult':
case 'Child':
return 1;
break;
case 'Pair':
return 2;
break;
}
}
// 子供用アトラクション利用可否
public isAvailableChildAttraction(): boolean {
switch(this._type) {
case 'Adult':
case 'Pair':
return false;
break;
case 'Child':
return true;
break;
}
}
}
아무래도 switch
문장이 너무 많은 것 같아.물론'아동표 이외의 표인지'판정이 난 경우
if...else
사용해도 문제가 없지만, 어쨌든 여건이 많이 갈린다는 인상을 준다.문제는 여기서'카테고리별로 조기 할인표를 추가하고 싶다'거나'성인 전용 놀이시설이 있어서 판정 처리를 하고 싶다'처럼 새로운 카테고리와 처리가 늘어나면서 지점이 계속 확장된다는 점이다.
현실 속 놀이공원 표도'노년표','단체표','인터넷 예약표'와 같은 종류가 다양해 앞으로도 종류가 늘어날 것으로 보인다.
정책 모드로 구현
거기에 등장하는 것은 전략 모델이다.
전략 모델을 대략적으로 설명하자면 알고리즘만 반에 잘라내는 생각이다.
먼저 알고리즘의 기초만 정의한'티켓 전략'을 제작하고 각 티켓 유형에 대응하는 알고리즘을 실현하는'XXX 전략'을 제작했다.
// チケットストラテジ
interface TicketStrategy {
getPrice(): number;
getUserCount(): number;
isAvailableChildAttraction(): boolean;
}
// 子供用チケットストラテジ
class ChildTicketStrategy implements TicketStrategy {
getPrice = (): number => 1000;
getUserCount = (): number => 1;
isAvailableChildAttraction = (): boolean => true;
}
// 大人用チケットストラテジ
class AdultTicketStrategy implements TicketStrategy {
getPrice = (): number => 3000;
getUserCount = (): number => 1;
isAvailableChildAttraction = (): boolean => false;
}
// ペアチケットストラテジ
class PairTicketStrategy implements TicketStrategy {
getPrice = (): number => 5000;
getUserCount = (): number => 2;
isAvailableChildAttraction = (): boolean => false;
}
class Ticket {
private _strategy: TicketStrategy;
constructor(strategy: TicketStrategy) {
this._strategy = strategy;
}
getPrice = (): number => this._strategy.getPrice();
getUserCount = (): number => this._strategy.getUserCount();
isAvailableChildAttraction = (): boolean => this._strategy.isAvailableChildAttraction();
}
이렇게 하면 알고리즘 부분의 처리도 쉽게 작용할 수 있고 새로운 종류가 증가하더라도 개별 전략을 늘려 대응할 수 있다.한마디로 티켓 변경과 추가 요구에 대한 디자인은 유지보수가 더욱 쉽다.
상태 모드와 다름
이번
Typescript
에 디자인 모델 중 하나인'전략 모델'을 소개했다.정책 모델은 항상 상태 모델과 비슷하다고 여겨진다.
각종 패턴을 가져온 상황에서 최종 시스템의 코드는 기본적으로 같다는 것이다.
다음은 제 개인적인 견해입니다.
전략 모델은'다모드주의로 알고리즘의 편집을 해결하는'방법을 취했고 상대적으로 상태 모델은'다모드주의로 상태로 인해 발생하는 지점을 해결하는'방법을 취했다.
중점은 "착안점이 다를 뿐 해결책으로 다중모드주의를 사용했다는 점은 동일하다"는 것이다.
따라서 "기점으로서의 사상은 다르지만 코드 단계에서 떨어지는 경우는 똑같아 보인다"고 덧붙였다.
다음 글은 상태 모델을 총결하였다.
Reference
이 문제에 관하여([TS] 지금 들을 수 없는 전략 모드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/nekoniki/articles/396ebc523930c196dc13텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)