最近开始了设计模式的学习,在这里做简单的记录
这里我用的是《设计模式:可复用面向对象软件的基础》这本书,用到的例子都是书中的内容
(基本就是抄书了= =。 咳咳 不要在意这些细节)
So,you got it~
这里看到的是创建型模式中的ABSTRACT FACTORY(抽象工厂)
抽象工厂可以为我们提供一个创建一系列相关相互依赖对象的接口,在我们使用时无需指定这些接口具体的类。(个人理解为C++的动态绑定技术)
在以下几种情况下我们可以使用ABSTRACT FACTORY模式
- 一个系统要独立于它的产品创建、组合和表示时
- 一个系统要由多个产品系列中的一个来配置时
- 当你要强调一系列相关的产品对象的设计以便进行联合使用时
- 当你提供一个产品类库,而只想显示它们的借口而不是现实
这里是结构图:

关于ABSTRACT FACTORY的应用,CE3实体系统似乎就是用的类似的模式实现,同时书上也给出了几个例子供大家参考这里就不做说明了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class MazeFactory //AbstractFactory&ConcreteFactory { public: MazeFactory(); virtual Maze* MakeMaze() const { return new Maze; } virtual Maze* MakeWall() const { return new Wall; } virtual Maze* MakeRoom(int n) const { return new Room(n); } virtual Maze* MakeDoor(Room* r1, Room * r2) const { return new Door(r1, r2); } }; class BombedMazeFactory : public MazeFactory { public: BombedMazeFactory(); virtual Room* MakeRoom(int n) const { return new RoomWithBomb(); } virtual Room* MakeWall () const { return new BombedWall(); } };
|
上面这段即为书上给出的例子,其中MazeFactory作为AbstractFactory的同时又充当了ConcreteFactory角色,而BombedMazeFactory则只是作为ConcreteFactory在其中。
在我们使用AbstractFactory时,使用MazeFactory的引用来创建实体,调用时我们只需通过不同的对象参数既可产生不同的实体。
具体而言就是这样一段代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Maze* MazeGame::CreateMaze (MazeFactory& factory) { } MazeGame game; MazeFactory factory; game.CreateMaze(factory);
|
描述中应该是有很多问题的,所以有错误的话希望大家指出作为纯正菜鸡再次感谢Orz