用处:隐藏了对象创建的细节,只需要知道对象的类型,就可以用对应的工厂子类创建产品。用户看到和使用的只是一个抽象产品,而无需关心到底返回了那个子类。
关键代码:将产品的创建延迟(交给)到子类; 返回的是一个抽象产品
优点:遵循了开闭原则
缺点:每增加一个新的产品,就需要新增一个子类,产品多时,维护量大。
代码:
#include <cstdio>
#include <stack>
#include <set>
#include <iostream>
#include <string>
#include <vector>
#include <queue>
#include <list>
#include <functional>
#include <cstring>
#include <algorithm>
#include <cctype>
#include <string>
#include <map>
#include <iomanip>
#include <cmath>
#include <time.h>
#define LL long long
using namespace std;
class Product
{
public:
virtual void Show() = 0;
};
class ProductA : public Product
{
public:
void Show()
{
cout<< "I'm ProductA"<<endl;
}
};
class ProductB : public Product
{
public:
void Show()
{
cout<< "I'm ProductB"<<endl;
}
};
class Foctory
{
public:
virtual Product* createProductor()=0;
};
class FoctorA:public Foctory
{
public:
Product* createProductor()
{
return new ProductA();
}
};
class FoctorB:public Foctory
{
public:
Product* createProductor()
{
return new ProductB();
}
};
Product* getProductor(Foctory *f)
{
if (f != NULL)
return f->createProductor();
delete f;
}
int main()
{
Product *a = getProductor(new FoctorA);
a->Show();
Product *b = getProductor(new FoctorB);
b->Show();
}