#ifndef PRODUCTA_H
#define PRODUCTA_H
#include <iostream>
using namespace std;
class ProductA{
public:
virtual void say(){
cout << "I'm A" << endl;
}
};
class ProductA1:public ProductA{
public:
void say(){
cout << "I'm A1" << endl;
}
};
class ProductA2:public ProductA{
public:
void say(){
cout << "I'm A2" << endl;
}
};
#endif // PRODUCTA_H
#ifndef PRODUCTC_H
#define PRODUCTC_H
#include <iostream>
using namespace std;
class ProductC{
public:
virtual void say(){
cout << "I'm C" << endl;
}
};
class ProductC1:public ProductC{
public:
void say(){
cout << "I'm C1" << endl;
}
};
class ProductC2:public ProductC{
public:
void say(){
cout << "I'm C2" << endl;
}
};
#endif // PRODUCTC_H
#ifndef PRODUCTFACTORY_H
#define PRODUCTFACTORY_H
#include "ProductA.h"
#include "ProductC.h"
class ProductFactory{
public:
virtual ProductA* createProductA(){
return new ProductA;
}
virtual ProductC* createProductC(){
return new ProductC;
}
};
class ProductFactory1:public ProductFactory{
public:
ProductA* createProductA(){
return new ProductA1;
}
ProductC* createProductC(){
return new ProductC1;
}
};
class ProductFactory2:public ProductFactory{
public:
ProductA* createProductA(){
return new ProductA2;
}
ProductC* createProductC(){
return new ProductC2;
}
};
#endif // PRODUCTFACTORY_H
#include "ProductFactory.h"
void test(ProductFactory &pf){
ProductA* pa = pf.createProductA();
ProductC* pc = pf.createProductC();
pa->say();
pc->say();
delete pa;
delete pc;
}
int main(){
ProductFactory1 pf1;
test(pf1);
cout << "ProductFactory1 end,ProductFactory2 start" << endl;
ProductFactory2 pf2;
test(pf2);
int i;
cin >> i;
return 0;
}