prototype.c

来自「Design Pattern C Source Code」· C语言 代码 · 共 141 行

C
141
字号
/**/#ifdef SampleCode1#include "C++/MazeGame.H"#include "C++/MazeFactory.H"#include "C++/MazeParts.H"/**/class MazePrototypeFactory : public MazeFactory {public:    MazePrototypeFactory(Maze*, Wall*, Room*, Door*);/**/    virtual Maze* MakeMaze() const;    virtual Room* MakeRoom(int) const;    virtual Wall* MakeWall() const;    virtual Door* MakeDoor(Room*, Room*) const;/**/private:    Maze* _prototypeMaze;    Room* _prototypeRoom;    Wall* _prototypeWall;    Door* _prototypeDoor;};/**/MazePrototypeFactory::MazePrototypeFactory (    Maze* m, Wall* w, Room* r, Door* d) {   _prototypeMaze = m;   _prototypeWall = w;   _prototypeRoom = r;   _prototypeDoor = d;}/**/Wall* MazePrototypeFactory::MakeWall () const {    return _prototypeWall->Clone();}/**/Door* MazePrototypeFactory::MakeDoor (Room* r1, Room *r2) const {    Door* door = _prototypeDoor->Clone();    door->Initialize(r1, r2);    return door;}/**/void dummy () {/**/MazeGame game;MazePrototypeFactory simpleMazeFactory(    new Maze, new Wall, new Room, new Door);Maze* maze = game.CreateMaze(simpleMazeFactory);/**/}void dummy2 () {/**/MazePrototypeFactory bombedMazeFactory(    new Maze, new BombedWall,    new RoomWithABomb, new Door);/**/}#endif#ifdef SampleCode2#define Door_H#define BombedWall_H#define DoorNeedingSpell_H#include "C++/MazeParts.H"/**/class Door : public MapSite {public:    Door();    Door(const Door&);/**/    virtual void Initialize(Room*, Room*);    virtual Door* Clone() const;/**/    virtual void Enter();    Room* OtherSideFrom(Room*);private:    Room* _room1;    Room* _room2;};/**/Door::Door (const Door& other) {    _room1 = other._room1;    _room2 = other._room2;}/**/void Door::Initialize (Room* r1, Room* r2) {    _room1 = r1;    _room2 = r2;}/**/Door* Door::Clone () const {    return new Door(*this);}/**/class BombedWall : public Wall {public:    BombedWall();    BombedWall(const BombedWall&);/**/    virtual Wall* Clone() const;    bool HasBomb();private:    bool _bomb;};/**/BombedWall::BombedWall (const BombedWall& other) : Wall(other) {    _bomb = other._bomb;}/**/Wall* BombedWall::Clone () const {    return new BombedWall(*this);}/**/#endif/**/

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?