gFuGuy: } virtual Obstacle* ma
Автор admin Суббота, 20 июня 2009 11:32
gFuGuy: } virtual Obstacle* makeObstacle() { return new NastyWeapon; } }: class GameEnvironment { GameElementFactory* gef: Player* p: Obstacle* ob: public: GameEnvironment(GameElementFactory* factory) : gef(factory). p(factory->makePlayer()), ob(factory->makeObstacle()) {} void playO { p->interactWith(ob): } -GameEnvironmentО { delete p: delete ob: delete gef; } }: int mainO { GameEnvironment gKnew KittiesAndPuzzles). g2(new KillAndDismember); gl.playO; g2.play(); } /* Вывод: Kitty has encountered a Puzzle KungFuGuy now battles against a NastyWeapon */ ///:- В этой среде объекты Player взаимодействуют с объектами Obstacle, но типы этих объектов зависят от игры. Вы определяете тип игры, выбирая определенный объект GameElementFactory, после чего класс GameEnvironment управляет исходным состоянием и ходом игры. В нашем примере этот класс не рассчитан на наследование, хотя, возможно, это имело бы смысл. Приведенный пример также демонстрирует методику двойной диспетчеризации, которая будет рассматриваться далее. Виртуальные конструкторы Одна из главных целей использования фабрик — такая организация кода, при
Комментарии закрыты.
Последние комментарии