Chinaunix首页 | 论坛 | 博客
  • 博客访问: 85027
  • 博文数量: 34
  • 博客积分: 1640
  • 博客等级: 上尉
  • 技术积分: 395
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-17 14:37
文章分类
文章存档

2008年(34)

我的朋友
最近访客

分类:

2008-04-24 12:13:30

所谓Factory Method也就是一个类中的普通方法。此方法的特殊之处有:
1. 该方法定义了如何创建某个复杂对象的框架。
2. 此方法调用了该类中定义的虚拟的创建其他对象的方法,并通过这些方法来创建该复杂对象的子对象。
此模式通过子类对那些虚拟函数的实例化,从而可以创建不同的复杂对象。

书中所定义的相关类为:
#ifndef _BOMBED_MAZE_GAME_H
#define _BOMBED_MAZE_GAME_H

#include <iostream>

#include "Wall.h"
#include "MazeGame.h"

class BombedWall : public Wall {
 public:
  BombedWall() {
    std::cout << "BombedWall Constructor." << std::endl;
  }

  virtual void Enter() {
    std::cout << "BombedWall Entered." << std::endl;
  }
};

class RoomWithABomb : public Room {
 public:
  RoomWithABomb(int roomNo) : Room(roomNo) {
    std::cout << "RoomWithABomb " << roomNo << " Constructor." << std::endl;
  }

  virtual void Enter() {
    std::cout << "RoomWithABomb " << GetRoomNo() << " Entered." << std::endl;
  }
};

class BombedMazeGame : public MazeGame_FactoryMethod {

 public:
  BombedMazeGame() {}

  virtual Wall* MakeWall() const
  { return new BombedWall; }
  
  virtual Room* MakeRoom(int n) const
  { return new RoomWithABomb(n); }
  
};

#endif


通过实现MazeGame方式的比较,我们可以发现其实Factory Method模式和Abstract Factory模式是很相似的,区别主要在于:在Factory Method模式中,对子对象的构建是由子类来进行的,而在Abstract Factory模式中对子对象的构建是由其他的类来完成的。也就是说,Abstract Factory模式也就是将Factory Method模式中创建子对象的函数全部提到另外一个类中罢了。他们实现的是相同的功能,只不过是用的方式不一样而已,Factory Method模式使用的是继承,而Abstract Factory模式使用的是组合。

在对Factory Method模式的讲解中,作者提出了使用Factory Method的另一种场景,也就是所谓的连接平行的类层次。在这个应用中,其基本思想也是将某个类层次结构中的某些操作提出来由另外的一个类层次结构来实现。并且这两个层级结构中的类是一一对应的,构成一种平行的类层次。
阅读(598) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~