设计模式(1) 创建型模式和抽象工厂(Abstract Factory)(二)

2014-11-24 07:20:04 · 作者: · 浏览: 10
{ Maze* aMaze = factory.MakeMaze(); Room* r1 = factory.MakeRoom(1); Room* r2 = factory.MakeRoom(2); Door* aDoor = factory.MakeDoor(r1, r2); aMaze->AddRoom(r1); aMaze->AddRoom(r2); r1->SetSide(North, factory.MakeWall()); r1->SetSide(East, aDoor); ...... // 初始化room1, 和room2的四周 return aMaze; }
创建MazeFactory的子类EnchantedMazeFactory,这是一个创建施了魔法的迷宫的工厂
class EnchantedMazeFactory : public MazeFactory {
public:
    EnchantedMazeFactory();
    
    virtual Room* MakeRoom(int n) const
        { return new EnchantedRoom(n , CastSpell()); }

    virtual Door* MakeDoor(Room* r1, Room* r2) const
        { return new DoorNeedingSpell(r1, r2); }

protected:
    spell* CastSpell() const;
};

CreateMaze方法接收一个EnchantedMazeFactory实例来建造施了魔法的迷宫
MazeGame game;
EnchantedMazeFactory factory;
game.CreateMaze(factory);



相关模式: AbstractFactory类通常用工厂方法实现,但它们也可以用原型(Prototype)实现。 一个具体的工厂通常是一个单件(Singleton)。



参考资料: 《设计模式》