#include<iostream>
using namespace std;
//苹果抽象类
class AbstractApple {
public:
virtual void ShowName() = 0;
};
//中国苹果
class ChinaApple :public AbstractApple {
public:
void ShowName() override{
cout << "中国苹果" << endl;
}
};
class USAApple :public AbstractApple {
public:
void ShowName() override {
cout << "美国苹果" << endl;
}
};
//抽象香蕉
class AbstractBanana {
public:
virtual void ShowName() = 0;
};
class ChinaBanana :public AbstractBanana {
public:
void ShowName() override {
cout << "中国香蕉" << endl;
}
};
class USABanana :public AbstractBanana {
public:
void ShowName() override {
cout << "美国香蕉" << endl;
}
};
//抽象鸭梨
class AbstractPear {
public:
virtual void ShowName() = 0;
};
class ChinaPear :public AbstractPear {
public:
void ShowName() override {
cout << "中国鸭梨" << endl;
}
};
class USAPear :public AbstractPear {
public:
void ShowName() override {
cout << "美国鸭梨" << endl;
}
};
//抽象工厂 针对产品族
class AbstractFactory {
public:
virtual AbstractApple* CreateApple() = 0;
virtual AbstractBanana* CreateBanana() = 0;
virtual AbstractPear* CreatePear() = 0;
};
class ChinaFactory :public AbstractFactory {
public:
virtual AbstractApple* CreateApple() {
return new ChinaApple;
}
virtual AbstractBanana* CreateBanana() {
return new ChinaBanana;
}
virtual AbstractPear* CreatePear() {
return new ChinaPear;
}
};
class USAFactory :public AbstractFactory {
public:
virtual AbstractApple* CreateApple() {
return new USAApple;
}
virtual AbstractBanana* CreateBanana() {
return new USABanana;
}
virtual AbstractPear* CreatePear() {
return new USAPear;
}
};
void test() {
AbstractFactory* factory;
AbstractApple* apple;
AbstractBanana* banana;
AbstractPear* Pear;
factory = new ChinaFactory;
apple = factory->CreateApple();
apple->ShowName();
banana = factory->CreateBanana();
banana->ShowName();
Pear = factory->CreatePear();
Pear->ShowName();
delete factory;
delete apple;
delete banana;
delete Pear;
}
int main() {
test();
cin.get();
return 0;
}