#include <iostream>
using namespace std;
class Product {
public:
void Operation() {
cout << "Product." << endl;
}
};
class FactoryImple {
public:
virtual Product* FactoryMethod() {
return new Product;
}
};
class Factory {
public:
Factory(FactoryImple *factory) {
m_factory = factory;
m_prod = NULL;
}
~Factory() {
if (m_prod != NULL) {
delete m_prod;
cout << "Product deleted." << endl;
}
}
virtual Product* CreateProduct() {
Product *prod = m_factory->FactoryMethod();
m_prod = prod; // 何回も呼ばれるときの対応が必要
return prod;
}
private:
FactoryImple *m_factory;
Product *m_prod;
};
int main() {
FactoryImple *fac_imple = new FactoryImple;
Factory *factory = new Factory(fac_imple);
Product *prod = factory->CreateProduct();
prod->Operation();
delete fac_imple;
delete factory; // ここで prod も delete される
return 0;
}
参考サイト
最終更新:2011年11月14日 06:17