工廠方法模式定義
定義一個用於創建對象的接口,讓子類決定實例化哪一個類。核心結構分別是抽象工廠以及具體工廠,抽象產品以及具體產品。
#include <iostream>
using namespace std;
//抽象產品
class IWine
{
public:
virtual ~IWine(){}
virtual void createWine() = 0;
};
//抽象工廠類
class IFactory
{
public:
virtual ~IFactory(){}
virtual IWine* createFactory() = 0;
};
//具體產品 啤酒
class Beer :public IWine
{
public:
void createWine()
{
cout << "生產啤酒" << endl;
}
};
//具體產品 白酒
class Spirit :public IWine
{
public:
void createWine()
{
cout << "生產白酒" << endl;
}
};
//具體產品 紅酒
class RedWine :public IWine
{
public:
void createWine()
{
cout << "生產紅酒" << endl;
}
};
//啤酒工廠
class BeerFactory :public IFactory
{
public:
IWine* createFactory()
{
return new Beer;
}
};
//白酒工廠
class SpiritFactory :public IFactory
{
public:
IWine* createFactory()
{
return new Spirit;
}
};
//紅酒工廠
class RedWineFactory :public IFactory
{
public:
IWine* createFactory()
{
return new RedWine;
}
};
int main() //客戶端
{
IFactory *factory = nullptr;
//factory = new BeerFactory;
//factory = new RedWineFactory;
factory = new SpiritFactory;
if (factory)
{
factory->createFactory()->createWine();
delete factory;
factory = nullptr;
}
return 0;
}