Bridge (Factoryで生成するインスタンスをクライアントに破棄させない)

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



参考サイト

デザインパターンを“喩え話”で分かり易く理解する
http://www.netlaputa.ne.jp/~hijk/study/oo/designpattern.html



デザインパターンの骸骨たち
http://www002.upp.so-net.ne.jp/ys_oota/mdp/
最終更新:2011年11月14日 06:17