[게임 프로그래밍 패턴] 4. 프로토타입 패턴

WIGWAG·2023년 2월 14일

프로토타입 패턴 이란?

원형이 되는 인스턴스를 사용하여 생성할 객체의 종류를 명시하고, 이렇게 만든 견본을 복사해서 새로운 객체를 생성합니다.(GoF의 디자인 패턴 169p)

특정 클래스들과 1대1로 연관되는 새로운 클래스들을 만들 때 연관된 클래스들을 하나의 클래스로 만들어서 클래스 수를 줄이는 방법이다.


프로토타입 패턴 예시 코드

#include <iostream>

using namespace std;

class C_Monster
{
public:
	virtual ~C_Monster() {}
	virtual shared_ptr<C_Monster> Clone() = 0;
};

class C_Ghost : public C_Monster {
public:
	C_Ghost(int health, int speed)
		:health_(health), speed_(speed) {}

	virtual shared_ptr<C_Monster> Clone() override{
		return make_shared<C_Ghost>(health_, speed_);
	}

private:
	int health_;
	int speed_;
};

class C_Demon : public C_Monster {
public:
	C_Demon(int health, int speed)
		:health_(health), speed_(speed) {}

	virtual shared_ptr<C_Monster> Clone() override {
		return make_shared<C_Demon>(health_, speed_);
	}

private:
	int health_;
	int speed_;
};

class C_Sorceror : public C_Monster {
public:
	C_Sorceror(int health, int speed)
		:health_(health), speed_(speed) {}

	virtual shared_ptr<C_Monster> Clone() override {
		return make_shared<C_Sorceror>(health_, speed_);
	}

private:
	int health_;
	int speed_;
};

class C_Spawner {
	virtual ~C_Spawner() {}
	virtual C_Monster* Spawn_Monster() = 0;
};

template <class T>
class C_Spawner_For : public C_Spawner {
public:
	virtual shared_ptr<C_Monster> Spawn_Monster() override { return make_shared<T>(); }
};

int main() 
{
	auto ghost_spawner = make_shared<C_Spawner_For<C_Ghost>>();
}
profile
프로그래밍 공부 기록 노트

0개의 댓글