디자인 패턴 책의 추상 팩토리 패턴 샘플 코드와 관련하여 질문이 있습니다.디자인 패턴 - 초록 공장 - BombedMazeFactory
이 책은 방을 연결하는 벽과 문이있는 미로 게임의 단순하고 부분적인 예를 제공합니다.
다음 팩토리 메소드가 기본 MazeFactory 클래스가 :
class MazeFactory {
public:
MazeFactory();
virtual Maze* MakeMaze() const { return new Maze; }
virtual Wall* MakeWall() const { return new Wall; }
virtual Room* MakeRoom(int n) const { return new Room(n); }
virtual Door* MakeDoor(Room* r1, Room* r2) const {
return new Door(r1, r2);
}
}
저자 (들)을 다음 MazeFactory의 전문성 정의 :
이class BombedMazeFactory : public MazeFactory {
BombedMazeFactory();
virtual Room* MakeWall() const { return new BombedWall; }
virtual Door* MakeRoom(int n) const { return new RoomWithABomb(n); }
};
내가 정확히 방법을 모른다는 RoomWithABomb는 작동하지만 폭탄을 포함 할 확률이 5 % 인 방을 만들고 폭파 된 폭탄이있는 방을 포함하는 문을 열면 폭발 할 수 있다고 가정합니다.
이제 클라이언트가 BombedMazeFactory 클래스를 사용하여 미로를 만들고 일부 룸을 생성한다고 가정 해 보겠습니다. 생성 된 룸은 RoomWithABomb * 유형이지만 팩토리는 Room *을 반환합니다.
일부 미로 게임 논리를 구현하기 위해 방에 폭탄이 있는지 여부를 확인해야한다고 가정하지만 방 *은 폭탄에 대한 지식이 없습니다. 방에 폭탄이 들어 있는지 알아낼 수있는 유일한 방법은 룸 *을 나쁜 연습 인 RoomWithABomb *로 캐스팅하는 것입니다.
예가별로 좋지 않거나 이와 같은 사례를 처리하는 다른 방법이 있습니까?
각 방에 Enter() 메서드가있는 경우 RoomWithABomb 서브 클래스에서 재정의 할 수 있으며 임의로 폭탄을 설정하는 논리가 있습니다. – dbugger