设计模式--抽象工厂模式
来源:互联网 发布:淘宝卖家违规几次封号 编辑:程序博客网 时间:2024/06/06 16:16
抽象工厂模式的结构如图:
enum Direction{North, South, East, West};class MapSite//迷宫组件基类{public:virtual void Enter() = 0;};class Room : public MapSite{public:Room(int roomNo);MapSite* GetSide(Direction) const;void SetSide(Direction, MapSite*);virtual void Enter();private:MapSite* _sides[4];int _roomNumber;};class Wall : public MapSite{public:Wall();virtual void Enter();};class Door : public MapSite{public:Door(Room* r1 = 0, Room* r2 = 0);virtual void Enter();Room* OtherSideFrom(Room*);private:Room* _room1;Room* _room2;bool _isOpen;};class Maze{public:Maze();void AddRoom(Room*);Room* RoomNo(int) const;private://...};/************************************************************************//* 抽象工厂模式代码示例 *//************************************************************************/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);}private:};class EnchantedMazeFactory : public MazeFactory{public:EnchantedMazeFactory();virtual Room* MakeRoom(int n) const{return new //返回带咒语的房间}virtual Door* MakeDoor(Room* r1, Room* r2) const{return new //返回带咒语的门}private://...};class BombeMazeFactory : public MazeFactory{public:BombeMazeFactory();virtual Wall* MakeWall() const{return new//返回有炸弹的墙}virtual Room* MakeRoom(int n) const{return new //返回有炸弹的房间}private:};class MazeGame;//MazeGame创建迷宫的类
//抽象工厂作为引用参数(或者指针参数)传递给用户调用Maze* MazeGame::CreateMaze(MazeFactory& factory){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);r1->SetSide(South, factory->MakeWall());r1->SetSide(West, factory->MakeWall());r2->SetSide(North, factory.MakeWall());r2->SetSide(East, factory->MakeWall());r2->SetSide(South, factory->MakeWall());r2->SetSide(West, aDoor);return aMaze;}/************************************************************************//* 模式应用 *//************************************************************************/Maze* aMaze = NULL;MazeGame game;BombeMazeFactory factory;aMaze = game.CreateMaze(factory);
- 抽象工厂设计模式
- 设计模式-----抽象工厂
- 抽象工厂设计模式
- 抽象工厂设计模式
- 抽象工厂设计模式
- 设计模式 抽象工厂
- 设计模式--抽象工厂
- 设计模式--抽象工厂
- 设计模式 抽象工厂
- 设计模式-抽象工厂
- 设计模式-> 抽象工厂
- 抽象工厂设计模式
- 设计模式--抽象工厂
- 【设计模式】抽象工厂
- 设计模式---抽象工厂
- 【设计模式-抽象工厂】
- 设计模式-抽象工厂
- 设计模式--抽象工厂
- 第一章 Django环境配置
- Mysql 慢查询日志
- 面向对象的设计思想
- java-----螺旋矩阵
- 从零开始学android:Android事件处理—单击事件
- 设计模式--抽象工厂模式
- 使用ifstream和getline读取文件内容[c++]
- tool
- Java代码优化编程
- 写给妹妹的编程札记 5 - 搜索: 迷宫问题 - 广度优先搜索
- Android之Content Providers
- Codeforces Round #215 (Div. 2) -A. Sereja and Coat Rack
- [ javascript ] UEditor单独图片上传组件!适用IE,Chrome,firefox.
- 换行符 \n\r