Fabryka obiektów, opis działania.

0

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.

0
TURBOPAWEL napisał(a):

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?

To raczej informacja, jak metoda ma wyglądać.

 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ć?

to jest funkcja, jak sobie zdefiniujesz funkcję MyCreateFigure zgodnie z wcześniejszą definicją, to tu przekazujesz nazwę tej funkcji jako parametr. Będzie ona wykonana przy tworzeniu nowej figury.

1 użytkowników online, w tym zalogowanych: 0, gości: 1