디자인패턴
템플릿 메소드 패턴
khkg12
2023. 8. 4. 15:49
템플릿 메소드 패턴
템플릿 메소드에 virtual 함수들이 들어가고 그 가상함수만 자식 클래스에서 재정의 해주는 패턴이다.
즉 차이가 있는 것만 vritual로 빼주고 공통되는 부분은 그대로 냅두는 것이다.
ex) player와 monster라는 클래스가 character를 상속받을 때 둘의 죽음에 대한 기능(Die메소드)를 템플릿 메소드 패턴을 이용해 서로 다르게 쓰여야할 기능만 virtual로 빼서 정의한다.
코드예시)
class Character
{
protected: // 자식한테만 참조가능하게
int hp = 100;
int atk;
virtual void PostProcessDIe() = 0; // 노출이 되면안됨
public:
string name;
void SetHp(int value)
{
hp = value;
if (hp <= 0)
{
Die();
}
}
const int& GetHp() const
{
return hp;
}
virtual void PrintImage() = 0;
void Die()
{
PrintImage();
cout << name << "이 죽었습니다" << endl;
PostProcessDIe();
}
};
class Player : public Character
{
int state = 0;
public:
void PrintImage() override
{
switch (state)
{
case 0: // 멀쩡한 상태
cout << "멀쩡" << endl;
break;
case 1: // 분노 상태
cout << "분노" << endl;
break;
case 2: // 지친 상태
cout << "지침" << endl;
break;
}
}
void PostProcessDIe() override
{
cout << "경험치 감소" << endl;
cout << "hp를 1로변경" << endl;
cout << "마을씬으로 돌아감" << endl;
}
};
class Monster : public Character
{
public:
void PrintImage() override
{
cout << "몬스터그림" << endl;
}
void PostProcessDIe() override
{
cout << "아이템 드랍" << endl;
}
};