#include <iostream>
using namespace std;
class BreadMaker
{
public:
virtual void GetBread()
{
}
};
class BlackBread : public BreadMaker
{
public:
void GetBread()
{
cout << "小面烤出了黑面包" << endl;
}
};
class HoneyBread : public BreadMaker
{
public:
void GetBread()
{
cout << "小面烤出了蜂蜜面包" << endl;
}
}
class WhiteBread : public BreadMaker
{
public:
void GetBread()
{
cout << "小面烤出了白面包" << endl;
}
}
class IFactory
{
public:
virtual BreadMaker CreateBread() = 0;
}
class BlackBreadFactory : public IFactory
{
public:
BreadMaker* CreateBread()
{
return new BlackBread();
}
}
class HoneyBreadFactory : public IFactory
{
public:
BreadMaker* CreateBread()
{
return new HoneyBread();
}
}
class WhiteBreadFactory : public IFactory
{
public:
BreadMaker* CreateBread()
{
return new WhiteBread();
}
}
int main()
{
BreadMaker *breadMaker = NULL;
cout << "小面的面包店开业了!" << endl;
cout << "顾客要黑面包" << endl;
IFactory *breadFactory = new BlackBreadFactory();
breadMaker = breadFactory->CreateBread();
breadMaker->GetBread();
cout << "顾客要蜂蜜面包" << endl;
IFactory *breadFactory = new HoneyBreadFactory();
breadMaker = breadFactory->CreateBread(); breadMaker->GetBread();
cout << "顾客要白面包" << endl;
IFactory *breadFactory = new WhiteBreadFactory();
breadMaker = breadFactory->CreateBread();
breadMaker->GetBread();
return 0;
}