设计模式--工厂方法

原创 2013年12月03日 22:11:38

//代码示例

#include <iostream>
using namespace std;

enum
{
	North, 
	South,
	East,
	West,
};

enum GameType
{
	FIRST,
	SECOND,
	THREE,
	END,
};

class Maze;//迷宫
class Room;//房间
class Wall;//墙
class Door;//门

//基类
class MazeGame
{
public:
	MazeGame();
public:
	Maze* CreateMaze();
public:
	virtual Maze* MakeMaze() const
	{
		return new Maze;
	}
	virtual Room* MakeRoom(int n) const
	{
		return new Room(n);
	}
	virtual Maze* MakeWall() const
	{
		return new Wall;
	}
	virtual Maze* MakeDoor(Room* r1, Room* r2) const
	{
		return new Door(r1, r2);
	}
private:
};

Maze* MazeGame::CreateMaze()
{
	Maze* aMaze = MakeMaze();

	Room* r1 = MakeRoom(1);
	Room* r2 = MakeRoom(2);
	Door* theDoor = MakeDoor(r1, r2);

	aMaze->AddRoom(r1);
	aMaze->AddRoom(r2);

	r1->SetSide(North, MakeWall());
	r1->SetSide(East, theDoor);
	r1->SetSide(South, MakeWall());
	r1->SetSide(West, MakeWall());

	r2->SetSide(North, MakeWall());
	r2->SetSide(East,  MakeWall());
	r2->SetSide(South, MakeWall());
	r2->SetSide(West,  theDoor);
}

//子类
class BombeWall;
class RoomWithABomb;

class BombeMazeGame : public MazeGame
{
public:
	BombeMazeGame();
public:
	virtual Wall* MakeWall() const
	{
		return new BombeWall;
	}
	virtual Room* MakeRoom(int n) const
	{
		return new RoomWithABomb(n);
	}
private:
};

//子类
class EnchantedRoom;
class DoorNeedingSpell;

class EnchantedMazeGame : public MazeGame
{
public:
	EnchantedMazeGame();
public:
	virtual Room* MakeRoom(int n) const
	{
		return new Room(n);
	}
	virtual Maze* MakeDoor(Room* r1, Room* r2) const
	{
		return new DoorNeedingSpell(r1, r2);
	}
private:
};


//模式应用
class Consumer
{
public:
	Consumer();
public:
	MazeGame* CreateMaze(GameType type);//工厂方法(函数)
private:
};
//工厂方法(函数)实现

MazeGame* Consumer::CreateMaze(GameType type)
{
	switch (type)
	{
	case FIRST:
		{
			return MazeGame;
		}
		break;
	case SECOND:
		{
			return BombeMazeGame;
		}
		break;
	case THREE:
		{
			return EnchantedMazeGame;
		}
		break;
	}
}


【设计模式】简单工厂模式与工厂方法模式详细解读

1.前言     设计模式,各具特色,今天在此总结一下常见模式中 简单工厂模式与工厂方法模式的区别与联系 2.两种模式概要    1. 简单工厂模式         对于简单工厂模式的介绍,请...
  • yudandan10
  • yudandan10
  • 2013年03月10日 15:09
  • 4703

JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一...
  • jason0539
  • jason0539
  • 2014年04月07日 17:36
  • 221350

工厂方法模式(Factory Method)-最易懂的设计模式解析

前言在上文提到的最易懂的设计模式系列解析:简单工厂模式,发现简单工厂模式存在一系列问题: 工厂类集中了所有实例(产品)的创建逻辑,一旦这个工厂不能正常工作,整个系统都会受到影响; 违背“开放 - 关闭...
  • carson_ho
  • carson_ho
  • 2016年08月28日 08:31
  • 2842

设计模式之工厂方法

  • 2014年08月17日 18:34
  • 87KB
  • 下载

设计模式之工厂方法-例子代码

  • 2015年01月04日 20:45
  • 7KB
  • 下载

工厂方法设计模式

  • 2012年08月10日 23:00
  • 182KB
  • 下载

设计模式工厂方法的代码演示

  • 2009年11月13日 10:26
  • 9KB
  • 下载

Java设计模式-工厂方法

  • 2015年01月25日 01:24
  • 9KB
  • 下载

设计模式之工厂方法

  • 2015年12月02日 14:32
  • 9KB
  • 下载

iOS设计模式-工厂方法

  • 2012年04月20日 14:17
  • 36KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式--工厂方法
举报原因:
原因补充:

(最多只允许输入30个字)