推荐文章:https://design-patterns.readthedocs.io/zh_CN/latest/index.html
客户端(main)需要指定某个设备生产出产品。
工厂模式需要显式调用工厂类,一个工厂类只生产一类产品。
// 产品: 糖果
class Sugar
{
public:
// 展示产品
virtual void showProduct() = 0;
protected:
Sugar() {}
};
// 工厂: 糖果生产厂
class Factory
{
public:
// 生产糖果
virtual Sugar* createSugar() = 0;
protected:
Factory() {}
};
// 具体的糖果: 牛奶糖
class MilkSugar : public Sugar
{
public:
MilkSugar() :Sugar() {}
void showProduct() override
{
cout << "MilkSugar" << endl;
}
};
// 具体糖果: 花生糖
class PeanutSugar : public Sugar
{
public:
PeanutSugar():Sugar(){}
void showProduct() override
{
cout << "PeanutSugar" << endl;
}
};
// 具体工厂: 牛奶糖工厂
class MilkSugarFactory : public Factory
{
public:
MilkSugarFactory() :Factory(),m_sugar(NULL) {}
~MilkSugarFactory() { delete m_sugar; m_sugar = NULL; }
Sugar* createSugar() override
{
m_sugar = new MilkSugar();
return m_sugar;
}
private:
Sugar* m_sugar;
};
// 具体工厂: 花生糖工厂
class PeanutSugarFactory :public Factory
{
public:
PeanutSugarFactory() :Factory(), m_sugar(NULL) {}
~PeanutSugarFactory() { delete m_sugar; m_sugar = NULL; }
Sugar* createSugar() override
{
m_sugar = new PeanutSugar();
return m_sugar;
}
private:
Sugar* m_sugar;
};
int main()
{
// 牛奶糖工厂对象
Factory* factory = new MilkSugarFactory();
Sugar * sugar = factory->createSugar();
sugar->showProduct();
// 花生糖工厂对象
Factory* factory2 = new PeanutSugarFactory();
sugar = factory2->createSugar();
sugar->showProduct();
}