원형 패턴은 일종의 식당 메뉴와 같다.
미리 정해진 틀 대로 음식을 만들어 놓고, 손님이 주문하면 그 음식을 주는거다.
프로토타입 객체가 어떠한 객체들에 대한 원형을 가지고 있다가, 요청시 그 객체를 복사하여 주는 것이다.
class MazePrototypeFactory extends MazeFactory {
public Maze MakeMaze();
public Maze MakeRoom(int roomNum);
public Maze MakeWall();
public Maze MakeDoor(Room room1, Room room2);
private Maze prototypeMaze;
private Maze prototypeRoom;
private Maze prototypeWall;
private Maze prototypeDoor;
}
//함수의 구현부는
public Maze MakeMaze(){
return prototypeMaze.clone(); //clone()은 복사해주는 함수
}
생성자의 경우,
MazePrototypeFactory(Maze maze, Wall wall, Room room, Door door){
prototypeMaze = maze;
prototypeRoom = room;
prototypeWall = wall;
prototypeDoor = door;
}
door같은 경우 방과 방 사이를 연결해주는 추가적인 함수를 만들면 된다.
class Door extends MapSite{
Door();
public:
Door Clone(); //return new Door(this);
void Initialize(Room room1, Room room2); //방과 방 사이 연결 그냥 인자 받고 아래 room과 연결
void Enter();
Room otherSideFrom(Room room);
private:
Room room1;
Room room2;
}