Fabryka Factory

Do czego służy Fabryka?

Jest to kreacyjny wzorzec projektowy. Wyróżniamy dwie odmiany tego wzorca: Metoda Fabrykująca oraz Fabryka Abstrakcyjna. Obydwie odmiany mają ten sam cel: uprościć tworzenie nowych obiektów. Na początku zamieściłem przykład, który jeszcze nie używa wzorca Fabryka, zobaczmy jakie problemy napotykamy. Uważam, że dobrym przykładem będzie po prostu gra w statki.

Kodowanie gry w statki bez używania Fabryki

Na początku tworzymy klasę Ship, która zawiera prywatne cechy, które otrzyma każdy obiekt po utworzeniu. W naszym przykładzie cechę „rozmiar” otrzyma każdy statek. W klasie Ship tworzymy też konstruktor i getter.
Następnie tworzymy klasy statków czteromasztowych ShipSizeFour, trzymasztowych ShipSizeThree, itd. One dziedziczą po klasie Ship.
W klasie main tworzymy obiekty (statki).

Możliwe ryzyka i ich eliminowanie

Podczas tworzenia nowych obiektów może w łatwy sposób dojść do pomyłek, dlatego też wymyślono wzorzec Fabryka. Fabryka polega na oddelegowaniu tworzenia nowych obiektów do innych klas, tak by użytkownik musiał tylko zawołać jedną metodę i już otrzymał gotowy obiekt.

Fabryka - schemat działania

W moim artykule zaprezentuję odmianę Metoda Fabrykująca W tej odmianie można wyróżnić 4 główne elementy:

Poniżej można zapoznać się z gotowym kodem, w którym zaimplementowano wzorzec Fabryka.

Podsumowanie

Utworzyliśmy nowe statki za pomocą fabryki. Trzeba też pamiętać, aby konstruktor klasy Ship nie był dostępny w klasie main, dlatego warto nadać mu operator dostępu protected i wszystkie klasy dotyczące tworzenia statków przenieść do osobnego folderu.

Podsumowując, wzorzec fabryka jest bardzo pomocny do tworzenia obiektów. Użytkownik, który tworzy obiekty, nie musi wiedzieć jak one się tworzą, jakie mają parametry. Obiekty, które tworzymy stosując fabrykę są ze sobą kompatybilne.