AbstractFactoryパターン

「ファクトリ=工場」ということで、生成に関するデザインパターン
newを生身で使うのではなく、生成機能を持った関数を使う。(ファクトリーの由来)
効果としては、生成関数内を書き換えるだけで生成物の一括変更を行うことが出来たり、関数に引数を与えれば生成物を柔軟に変更することも出来る。

class PcPartsBase{};
class Cpu : public PcPartsBase{};
class Gpu : public PcPartsBase{};

class FactoryBase
{
public:
virtual PcPartsBase* Create() = 0;
};

class CpuFactory : public FactoryBase
{
public:
virtual PcPartsBase* Create()
{
return new Cpu();
}
};

class GpuFactory : public FactoryBase
{
public:
virtual PcPartsBase* Create()
{
return new Gpu();
}
};

void main()
{
FactoryBase* pFactory;
CpuFactory CpuFactory;
GpuFactory GpuFactory;

// CPU作成工場
pFactory = &CpuFactory;
Cpu* pCpu = pFactory->Create();

// GPU作成工場
pFactory = &GpuFactory;
Gpu* pGpu = pFactory->Create();
}


ゲームプログラミングで使ってるのを良く見る。

そして、パターン名間違ってました。ごめんなさい。