設計モードの工場方法モード(c++)


ファクトリメソッドモード定義
オブジェクトを作成するためのインタフェースを定義し、サブクラスにどのクラスをインスタンス化するかを決定させます.核心構造はそれぞれ抽象工場と具体的な工場、抽象製品と具体的な製品である.
#include 

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;
}