Factory Method a Abstract Factory Method
Ostatnio zmodyfikowano 2020-06-24 20:24
Ashey Temat założony przez niniejszego użytkownika |
Factory Method a Abstract Factory Method » 2020-06-24 17:11:51 Od niedawna uczę się wzorców projektowych i natrafiłem na mały problem, mianowicie nie potrafię zrozumieć różnicy między metodą wytwórczą a fabryką abstrakcyjną, rozumiem jak oby dwie działają, ale wydaje mi się to jednym i tym samym. Zarówno metoda wytwórcza może dzielić się na konkretne fabryki dziedziczące z abstrakcyjnej, jak i fabryka abstrakcyjna gdzie to wydaje się obowiązkowe. Wyczytałem gdzieś, że fabryka abstrakcyjna ma tworzyć rodziny obiektów ale przez to mam rozumieć, że jeden obiekt składający się z innych czy jak? Proszę o takie bardzo ogólne wyjaśnienie zasad i różnic w samym działaniu.
Dodatkowo. Załóżmy, że ktoś robi grę z gatunku rts i pisze system ras w grze, tj. Orki, Ludzie, Elfy itd. Tworzy abstrakcyjne klasy wojownik, pracownik itd. Tworzy od nich osobne klasy dla jednostki każdej z ras. I na końcu tworzy fabrykę abstrakcyjną i jej osobne fabryki dla każdej z ras, które zajmują się tworzeniem obiektów jednostek w danej rasie. Klient aby wytworzyć jednostkę, musi wybrać rasę oraz rodzaj jednostki. Czy taki przykład to fabryka abstrakcyjna czy jeszcze metoda wytwórcza? Spotkałem się z tutorialem, gdzie tak to jest przedstawione i nie widzę tam żadnych rodzin obiektów więc nie wiem, czy autor miał rację a to ja coś źle zrozumiałem, czy materiał był bezużyteczny. |
|
jankowalski25 |
» 2020-06-24 18:08:42 |
|
DejaVu |
» 2020-06-24 20:08:05 A w kontekście tworzenia RTS-a to raczej unikałbym na Twoim miejscu stosowania wzorców projektowych do zarządzania jednostkami. Proste dziedziczenie jest wystarczająco skutecznym rozwiązaniem (ale to w sumie nie nawiązuje do tematu, więc nie będę się rozwijał w tej kwestii). |
|
pekfos |
» 2020-06-24 20:24:41 I na końcu tworzy fabrykę abstrakcyjną i jej osobne fabryki dla każdej z ras, które zajmują się tworzeniem obiektów jednostek w danej rasie. Klient aby wytworzyć jednostkę, musi wybrać rasę oraz rodzaj jednostki. Czy taki przykład to fabryka abstrakcyjna czy jeszcze metoda wytwórcza? |
To jest przykład jak nie używać wzorców projektowych. Zacząłeś od wzorca, a potem zacząłeś szukać dla niego zastosowania, czyli kompletnie na opak! Wzorce należy dostosowywać do konkretnych przypadków, albo nie kierować się nimi w ogóle. Myśl o nich jak o przykładach użycia obiektowości w C++. Nauka czegokolwiek w programowaniu powinna prowadzić do pisania kodu, nie sklejania go z przykładów. Najlepszy opis wzorca znajdziesz w diagramie UML. TL;DR: Metoda wytwórcza = metoda wirtualna, Fabryka abstrakcyjna = klasa abstrakcyjna z interfejsem fabryki, więc po prostu dedykowana klasa do metod wytwórczych. |
|
« 1 » |