South_Bridge Skrevet 12. mars 2010 Del Skrevet 12. mars 2010 Kikket over noe greier i Gang of four boka, og jeg har vært borti factory pattern før, men jeg har aldri sett helt vitsen. kanskje fordi jeg ikke når en viss prosjektstørrelse... men la oss ta de meget brukte pizza eksemplene. man definerer et par klasser: Pizza Peperoni : Pizza TrippelOst : Pizza Biff : Pizza og i selve fabrikken: Pizza CreatePizza( PizzaType type ) swtich type return pizza bruken: Pizza* p = PizzaFactory::CreatePizza( PizzaType.Biff ) men hvorfor alt dette maset når jeg kunne bare ha gjort Pizza* p = new Biff() ?? Lenke til kommentar
[kami] Skrevet 12. mars 2010 Del Skrevet 12. mars 2010 Factories for å konstruere objekter er ganske viktig i det du må skrive kode som ikke bryr seg om hvilket objekt som lages. Dette skjer typisk når du får data (som leses fra database,fil eller nettverk) som sier hvilket objekt som skal lages. Ex class Ost : public Matvare {} ... class Kjøtt : public Matvare {} ... Si du har en fil som beskriver en handleliste som feks ser noe slikt ut: (Nytt entry på hver linje, resten av linja er data spesifikt for mattypen) Ost Brun Kjøtt Biff dypfryst Når du da leser inn fra fila ifstream handleliste("fil.txt"); while (!handleliste.eof()) { std::string type; ifstream >> type; Matvare* matvare = Matvare::CreateFood(type); std::string matData; getline(handleliste, matData); matvare->SetData(matData); // parser dataen og gjør den meningsfull for denne typen mat. } Kom på et litt mer beskrivende eksempel som jeg kan oppsummere i noen få setninger. Tenk deg at du lager et spill, der du har 2 forskjellig typer beveglige objekter som beveger seg på en server. Disse skal sendes til spillerene (clientene). Hvordan skal spillerene klare å lage riktig objekt ut i fra datastrømmen du sender dem? Hva skjer om serveren plutselig har 1000 forskjellige objekter? ser du at det her kan være praktisk med en factory? Lenke til kommentar
GeirGrusom Skrevet 12. mars 2010 Del Skrevet 12. mars 2010 Et praktusk eksempel er Activator klassen i .NET som tar et datatype eller string inn, og lager et objekt utifra det. Dette brukes mye av XML for eksempel, der data inn bestemmer objektene som skal danne treet. Lenke til kommentar
zotbar1234 Skrevet 12. mars 2010 Del Skrevet 12. mars 2010 (endret) ifstream handleliste("fil.txt"); while (!handleliste.eof()) { std::string type; ifstream >> type; // ... } Veeeeldig avsporing, men det frarådes på det sterkeste å lese data inn på denne måten. EOF trenger ikke å være satt før etter et forsøk på å lese forbi slutten. Endret 12. mars 2010 av zotbar1234 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå