[TS] 지금 안 들리는 상태 모드.
13505 단어 TypeScript초학자디자인 모델tech
개시하다
이번에는 컨디션 모드
State Pattern
에 대한 해설을 진행한다.다태성을 이용하여 각 상태의 행위를 표현하는 디자인 도형이다.
이번 컨디션 모드는?
유명한 곳에는
TECHSCORE
선생의 해설이 있다.상태에 따라 동작의 패턴도 달라진다.예를 들어'기분 좋은 상태','기분 나쁜 상태'라는 두 가지 상태를 가진 엄마에게 몇 가지 부탁을 할까 고민한다.기분 좋은 엄마에게'용돈 주세요','딤섬 주세요'등을 부탁할 때는'좋아요, 좋아요'용돈 주거나 딤섬 주세요.하지만 기분 나쁜 엄마에게 이런 부탁을 해도 들어주지 않을 수도 있다.엄마의 행동은 상태에 따라 달라진다.
State 모드란 상태의 변화에 따라 동작이 변할 때 위력을 발휘하는 모드이다
예제
다음과 같은'개'등급을 가정해 보자.
상태 모드 없음
예제의 내용에 대해 어떤 디자인 모델도 특별히 신경 쓰지 않고 인코딩을 하면 다음과 같이 될 것 같다.
class Dog {
// 状態
private _status: 'Hunger' | 'Full'
constructor(status: 'Hunger' | 'Full' ) {
this.setStatus(status);
}
public setStatus(status: 'Hunger' | 'Full') {
this._status = status;
}
// 一緒に遊ぶ
public withPlay(): void {
switch(this._status) {
case 'Hunger':
console.log("お腹がすいたからご飯をくれ!");
break;
case 'Full':
console.log("遊ぶ!");
break;
}
}
// ご飯を食べる
public eat(): void {
switch(this._status) {
case 'Hunger':
console.log("やった!ご飯だ!");
break;
case 'Full':
console.log("もうお腹いっぱいだよ・・・");
break;
}
}
}
각 함수는 switch
문장을 통해 상태를 판단하고 적당한 처리를 수행한다.상태는 두 가지가 있기 때문에 별 문제가 없지만 여기서부터'상태 추가'의 상황과'상태 관련 함수 증가'의 경우 매번 지점 처리를 다시 수정해야 한다.
상태 모드로 구현
거기에 등장하는 것은 컨디션 모드다.
상태 모드에서'상태와 관련된 함수'를 인터페이스로 정의하고 각 상태에서 실현한다.
상태가 있는 쪽(예와 같은
Dog
류)은 상태만 바뀐다.// 胃袋の状態IF
interface StomachState {
withPlay():void;
eat():void;
}
// 空腹状態
class HungerState implements StomachState {
withPlay = () => console.log("お腹がすいたからご飯をくれ!");
eat = () => console.log("やった!ご飯だ!");
}
// 満腹状態
class FullState implements StomachState {
withPlay = () => console.log("遊ぶ!");
eat = () => console.log("もうお腹いっぱいだよ・・・");
}
class Dog {
private _state: StomachState;
constructor(state: StomachState) {
this.setStatus(state);
}
public setStatus(state: StomachState) {
this._state = state;
}
// withPlayとeatはそれぞれ_state側で定義されているため
// その中身を意識せず実行するだけ
withPlay = () => this._state.withPlay();
eat = () => this._state.eat();
}
요점은'Dog
내에서 자신의 상태를 더 이상 의식하지 않는다'는 것과'상태가 변경되거나 추가될 때 다른 상태의 처리에 영향을 주지 않는다'는 것이다.위의 상태
HungerState
와 FullState
로 실시StomachState
되고 있기 때문에 여기에 복팔분목 등을 더한 상태는 다시 실시StomachState
하면 된다.이는 부주의
FullState
나 StomachState
의 행동에 변화가 생기지 않는 문제switch
에 고릴라가 쓴 경우 누락되거나 의도하지 않은 부분이 변경될 여지가 있다는 의미다.정책 모드와 다름
이번
Typescript
에 디자인 모델 중 하나인'상태 모델'을 소개했다.일반적으로 상태 모드는 정책 모드와 비슷합니다.
각종 패턴을 가져온 상황에서 최종 시스템의 코드는 기본적으로 같다는 것이다.
다음은 제 개인적인 견해입니다.
상태 모델에 대해'다모드주의로 상태로 인해 발생하는 지점을 해결한다'는 방법을 취했고 전략 모델은'다모드주의로 알고리즘을 해결하는 커팅'방법을 취했다.
중점은 "착안점이 다를 뿐 해결책으로 다중모드주의를 사용했다는 점은 동일하다"는 것이다.
따라서 "기점으로서의 사상은 다르지만 코드 단계에서 떨어지는 경우는 똑같아 보인다"고 덧붙였다.
전략 모델에 관하여 다음과 같은 글에서 총결하였다.
Reference
이 문제에 관하여([TS] 지금 안 들리는 상태 모드.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/nekoniki/articles/b039e5e553b5e95729b5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)