Impl�mentation du pattern Factory
Salut !
j'ai impl�ment� un pattern factory, qui construit une classe � partir d'un CString (cha�ne de caract�res MFC).
Ma classe factory utilise un objet std::Map<CString> qui associe des CString avec des fonctions statiques qui ont pour r�le de faire un new sur leur propre constructeur.
Avec du code (de m�moire), �a donne :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
class Frame
{
// Classe de base de toutes les classes dans le std::map<>
};
class FrameA:public Frame
{
static Frame* constructor() { return new FrameA(); }
};
class FrameB:public Frame
{
static Frame* constructor() { return new FrameB(); }
};
class FrameAA:public FrameA
{
static Frame* constructor() { return new FrameAA(); }
};
// --- Quelque part, ailleurs... --- //
// Remplissage de la map
std::map<CString, Frame*(constructor*) > MonMap;
MonMap["evChose"] = FrameA::constructor;
MonMap["evBidule"] = FrameB::constructor;
MonMap["evMachin"] = FrameAA::constructor;
// et encore plus loin, utilisation de la map
Frame* pFrame = MonMap[UneVariableDeTypeCString]();
// pFrame pointe sur un FrameA, ou FrameB ou FrameAA, etc... |
Bon, je sais, c'est bourr� d'erreurs, mais j'ai tap� ce code de m�moire, c'est juste pour vous exposer le principe.
Avec le vrai code, �a marche bien, mais j'aimerai aller plus loin...
Mais tout d'abord, quelques questions :
- est-ce qu'il �xiste des impl�mentations compl�tes de r�f�rence des design pattern GOF en C++ ?
- est-ce que ma m�thode a de gros inconv�nients ?
Pour aller plus loin, j'aimerai rendre le CString static � la classe, pour pouvoir remplir mon map comme ceci :
Code:
1 2 3 4
|
MonMap[FrameA::m_CStrCle] = FrameA::constructor;
MonMap[FrameB::m_CStrCle] = FrameB::constructor;
MonMap[FrameAA::m_CStrCle] = FrameAA::constructor; |
et puis comme cette cl� est utilis� dans d'autres map, autant le rendre attribut static const pour chacunes des classes h�ritant de Frame.
et l�... je me dis que c'est moche, parce que �a ressemble � du code factorisable, qui n'est pas factoris�.
Pour info, dans le vrai logiciel, je n'ai pas trois classes qui h�ritent de Frame, mais 82....
Donc la question cruciale, et objet de ce long post est :
n'�xisterait-il pas un moyen de cr�er une liste de classes afin de pouvoir remplir mon Map de fa�on plus �l�gante que ce qui est pr�sent� au-dessus ?