Factory Method パターン
Factory Method パターン - Wikipedia
インスタンスを生成する工場をTemplate Method パターンで構成したもの。
Factory(Creator)でProduct(Product)の生成手順を記述しておいて、IDCardFactory(Concrete Creator)にIDCard(Concrete Productの作り方の詳細を記述。
#include <string> #include <iostream> #include <vector> using namespace std; //Product class Product { public : virtual void Use() const = 0; }; //Creator class Factory { public : Product * Create(string owner){ Product * product = CreateProduct(owner); RegisterProduct(*product); return product; } protected : virtual Product * CreateProduct(string owner) = 0; virtual void RegisterProduct(const Product & product) = 0; }; //Concrete Product class IDCard : public Product { public : IDCard(string owner){ cout << owner << "のカードを作ります。" << endl; this->owner_ = owner; } void Use() const{ cout << this->owner_ << "のカードを使います。" << endl; } string GetOwner() const{ return this->owner_; } private : string owner_; }; //Concrete Creator class IDCardFactory : public Factory { protected : Product * CreateProduct(string owner){ return new IDCard(owner); } void RegisterProduct(const Product & product){ const IDCard & p = dynamic_cast<const IDCard &>(product); owners_.push_back(p.GetOwner()); } private : vector<string> owners_; }; //main int main() { Factory *factory = new IDCardFactory(); Product * p1 = factory->Create("teramonagi"); Product * p2 = factory->Create("gigamonagi"); p1->Use(); p2->Use(); delete p1, p2; delete factory; getchar(); return 0; }