标题简单工厂模式
简单工厂专门定义一个工厂类来负责创建其他类的实例,像是一个工厂去生产各种产品的过程。
普通玩具类
#include <iostream>
#include <string>
using namespace std;
class toy
{
public:
toy(string name)
:
sName(name)
{
};
void Cry()
{
}
string sName;
};
class CatToy:toy
{
public:
void Cry()
{
cout <<sName<< ":喵喵喵" << endl;
}
};
class DogToy :toy
{
public:
void Cry()
{
cout << sName << ":汪汪汪" << endl;
}
};
如上例,声明了玩具类,每次创建猫玩具,狗玩具都需要分别实例化具体的类。这样,如果以后需要增加米老鼠玩具,老虎玩具…实例化对象的时候就不太方便了(需要知道具体的类才行)
简单工厂
struct ToyType
{
enum
{
CAT = 0,
DOG,
TOTALTOY
};
};
class ToyFactory
{
public:
ToyFactory() {};
toy* CreatToy(int iToy)
{
toy* mToy = NULL;
switch (iToy)
{
case ToyType::CAT:
mToy = new CatToy();
break;
case ToyType::DOG:
mToy = new DogToy();
break;
default:
break;
}
return mToy;
}
};
int main()
{
ToyFactory* toyfactory = new ToyFactory();
toy* cat = toyfactory->CreatToy(ToyType::CAT);
cat->Cry();
toy* doy = toyfactory->CreatToy(ToyType::DOG);
doy->Cry();
}
这里简单工厂就是:可以通过ToyFactory类去实现各种玩具类。
优点:工厂和产品职责分明,实现产品时可以通过工厂方便地进行实现操作,省去了直接操作的过程。
缺点:违背了开闭原则(修改封闭,对添加开放)。