#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
class AbstractApple{
public:
virtual void showName() = 0;
};
class ChinaApple:public AbstractApple{
public:
virtual void showName() {
cout << "中国苹果" << endl;
}
};
class AmericanApple:public AbstractApple{
public:
virtual void showName() {
cout << "美国苹果" << endl;
}
};
class AbstractBanana {
public:
virtual void showName() = 0;
};
class ChinaBanana :public AbstractBanana {
public:
virtual void showName() {
cout << "中国香蕉" << endl;
}
};
class AmericanBanana :public AbstractBanana
{
public:
virtual void showName() {
cout << "美国香蕉" << endl;
}
};
class AbstractPear {
public:
virtual void showName() = 0;
};
class ChinaPear :public AbstractPear {
public:
virtual void showName() {
cout << "中国鸭梨" << endl;
}
};
class AmericanPear :public AbstractPear{
public:
virtual void showName() {
cout << "美国鸭梨" << endl;
}
};
class AbstractFactory{
public:
virtual AbstractApple* CreateApple() = 0;
virtual AbstractBanana* CreateBanana() = 0;
virtual AbstractPear* CreatePear() = 0;
};
//中国工厂
class ChinaFactor: public AbstractFactory
{
public:
virtual AbstractApple* CreateApple(){
return new ChinaApple;
}
virtual AbstractBanana* CreateBanana() {
return new ChinaBanana;
}
virtual AbstractPear* CreatePear() {
return new ChinaPear;
}
};
//美国工厂
class AmericaFactor : public AbstractFactory
{
public:
virtual AbstractApple* CreateApple() {
return new AmericanApple;
}
virtual AbstractBanana* CreateBanana() {
return new AmericanBanana;
}
virtual AbstractPear* CreatePear() {
return new AmericanPear;
}
};
void test() {
AbstractFactory* factory = NULL;
AbstractBanana* banana = NULL;
AbstractApple* apple = NULL;
AbstractPear* pear = NULL;
factory = new ChinaFactor;
apple = factory->CreateApple();
banana = factory->CreateBanana();
pear = factory->CreatePear();
apple->showName();
banana->showName();
pear->showName();
delete apple;
delete banana;
delete pear;
}
int main(void)
{
test();
system("pause");
return 0;
}