#include <iostream>
using namespace std;
class Product
{
public:
virtual void Show() = 0;
};
class ProductA: public Product
{
public:
void Show()
{
cout << "A" << endl;
}
};
class ProductB: public Product
{
public:
void Show()
{
cout << "B" << endl;
}
};
class ProductC: public Product
{
public:
void Show()
{
cout << "C" << endl;
}
};
class Factory
{
public:
static Product* CreateProduct(char type)
{
switch (type)
{
case 'A':
return new ProductA();
case 'B':
return new ProductB();
case 'C':
return new ProductC();
}
}
};
int main()
{
Product* productA = Factory::CreateProduct('A');
Product* productB = Factory::CreateProduct('B');
Product* productC = Factory::CreateProduct('C');
productA->Show();
productB->Show();
productC->Show();
return 0;
}
优点:工厂类根据指定的信息创建对应的产品,客户端仅负责使用产品即可,不需要关心产品具体是如何创建的。实现对象创建和使用的分离
缺点:实例化对象的逻辑都放在工厂类里,每次需求变化都需要单独修改工厂类,违反了开闭原则。