假设现在有一个游戏开发公司,有的程序员去写各种怪物,有的程序员去创建怪物对象,也就是说:后一种程序员是前一种程序员的客户。让后一种程序员去记住第一种程序员写的很多怪物的类名是很麻烦的,并且也不应该让后一种程序员可以随便修改第一种程序员的代码,即代码分离。这时候,可以利用简单工厂模式,后一种程序员可以利用生产怪物的工厂去创建各种各样的工厂,后一种程序员不需要知道这种怪物是如何被创建的。通过这个工厂,隔离两种程序员代码的直接交互。
现在,假设有怪物A,怪物B。
#include <iostream>
#include <memory>
using namespace std;
//怪物基类
class monster
{
public:
virtual void show()=0;
virtual ~monster(){}
};
//怪物A
class monsterA:public monster
{
public:
void show()
{
cout<<"怪物A"<<endl;
}
};
//怪物B
class monsterB:public monster
{
public:
void show()
{
cout<<"怪物B"<<endl;
}
};
//枚举怪物
enum Type{monsterTypeA,monsterTypeB};
//生产怪物的工厂
class factory
{
public:
monster* createMonster(Type mt)
{
switch(mt)
{
case monsterTypeA://创建A类怪物
return new monsterA();
break;
case monsterTypeB://创建B类怪物
return new monsterB();
break;
default:
return 0;
break;
}
}
};
int main()
{
factory f;
//a使用智能指针
auto_ptr<monster> a(f.createMonster(monsterTypeA));
a->show();
//b应该手动删除
monster* b=f.createMonster(monsterTypeB);
b->show();
delete b;
}