#include <iostream>
#include <list>
using namespace std;
//产品等级
class AbstractApple
{
public:
virtual void showName() = 0;
};
class chinaApple :public AbstractApple
{
public:
virtual void showName()
{
cout << "中国苹果" << endl;
}
};
class usaApple :public AbstractApple
{
public:
virtual void showName()
{
cout << "美国苹果" << endl;
}
};
class japanApple :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 usaBanana :public AbstractBanana
{
public:
virtual void showName()
{
cout << "美国香蕉" << endl;
}
};
class japanBanana :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 usaPear :public AbstractPear
{
public:
virtual void showName()
{
cout << "美国梨" << endl;
}
};
class japanPear :public AbstractPear
{
public:
virtual void showName()
{
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;
}
};
class japanFactory :public AbstractFactory {
public:
virtual AbstractApple* createApple() {
return new japanApple;
}
virtual AbstractBanana* createBanana() {
return new japanBanana;
}
virtual AbstractPear* createPear() {
return new japanPear;
}
};
int main()
{
//中国苹果
AbstractFactory* fac = new chinaFactory;
AbstractApple* apple = fac->createApple();
apple->showName();
//美国香蕉
fac = new usaFactory;
AbstractBanana* bana = fac->createBanana();
bana->showName();
//日本梨
fac = new japanFactory;
AbstractPear* pear = fac->createPear();
pear->showName();
}
设计模式—抽象工厂
最新推荐文章于 2024-04-25 09:25:45 发布