工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
代码:
#include<iostream>
using namespace std;
//披萨接口
class Pizza
{
public:
Pizza::Pizza()
{
}
virtual GetDescribe() = 0;
};
//披萨工厂
class PizzaFactory
{
public:
PizzaFactory::PizzaFactory()
{}
virtual Pizza* CreatePizza() = 0;
};
class PizzaA : public Pizza
{
public:
PizzaA::PizzaA()
{}
GetDescribe()
{
cout << "this is PizzaA ! " << endl;
}
};
class PizzaB : public Pizza
{
public:
GetDescribe()
{
cout << "this is PizzaB ! " << endl;
}
};
class PizzaC : public Pizza
{
public:
GetDescribe()
{
cout << "this is PizzaC ! " << endl;
}
};
//工厂之一
class PizzaAFactory : public PizzaFactory
{
public:
PizzaAFactory::PizzaAFactory()
{}
Pizza* CreatePizza()
{
return new PizzaA();
}
};
//工厂之一
class PizzaBFactory : public PizzaFactory
{
public:
PizzaBFactory::PizzaBFactory()
{}
Pizza* CreatePizza()
{
return new PizzaB();
}
};
//工厂之一
class PizzaCFactory : public PizzaFactory
{
public:
PizzaCFactory::PizzaCFactory()
{}
Pizza* CreatePizza()
{
return new PizzaC();
}
};
int main()
{
cout << "PizzaA Factory...." << endl;
PizzaAFactory* pPizzaAFactory = new PizzaAFactory();
Pizza* pizzaA = pPizzaAFactory->CreatePizza();
pizzaA->GetDescribe();
cout << "PizzaB Factory...." << endl;
PizzaBFactory* pPizzaBFactory = new PizzaBFactory();
Pizza* pizzaB = pPizzaBFactory->CreatePizza();
pizzaB->GetDescribe();
cout << "PizzaC Factory...." << endl;
PizzaCFactory* pPizzaCFactory = new PizzaCFactory();
Pizza* pizzaC = pPizzaCFactory->CreatePizza();
pizzaC->GetDescribe();
getchar();
}
参考资料: