http://pastebin.com/VYS4iYSx - tu część kodu, która to obejmuje.
Mam za zadanie wytłumaczyć (a raczej zrozumieć) jak działa ta fabryka obiektów.
typedef Figure * (*CreateFigure)(); //wskaznik na funkcje tworzaca obiekt
Ta metoda zawiera wskaźnik na funkcję - rozumiem, że ma "rozróżniać" typ Figury, a następnie wskazywać na funkcję, która tworzy obiekt tej klasy?
unsigned int registerFigure(CreateFigure fun); //dodaje element do kolekcji,
unsigned int Factory::registerFigure(CreateFigure fun)
{
//metoda automatycznie zwieksza licznikk ID_ i
//zapisuje pare
fig_creators_.insert(std::pair<unsigned int,CreateFigure>(++ID_,fun));
//wynik zwracany przechowywany przez kazda klase w polu statycznym id_
return ID_;
}
Rozumiem, że tutaj rejestruje element, tzn. nadaje klasie ID i funkcję tworzącą obiekt tej klasy? Tu niezbyt rozumiem to CreateFigure, to jest już obiekt, czy właśnie funkcja która ma je tworzyć?
Figure * Create(unsigned int id);
Figure * Factory::Create(unsigned int id)
{
//Metoda na podstawie id tworzy nowy obiekt
My_map::iterator it=fig_creators_.find(id);
if (it!=fig_creators_.end())
{
return (it->second)();
}
return 0L;
}
Tutaj szuka po mapie ID i tworzy nowy obiekt. Ogólnie prosiłbym wyjaśnienie tych metod
unsigned int registerFigure(CreateFigure fun); //dodaje element do kolekcji,
Figure * Create(unsigned int id);
oraz
typedef Figure * (*CreateFigure)(); //wskaznik na funkcje tworzaca obiekt
Bardzo dziękuję za pomoc.