Wzorzec metody fabrycznej wyodrębnia proces decyzyjny z klasy wywołującej. Ma to kilka zalet:
Ponowne użycie. Jeśli chcę utworzyć instancję w wielu miejscach, nie muszę powtarzać mojego warunku, więc kiedy przychodzę dodać nową klasę, nie ryzykuję, że ją pominę.
Testowalność jednostkowa. Mogę napisać 3 testy dla fabryki, aby upewnić się, że zwraca prawidłowe typy we właściwych warunkach, wtedy moja klasa wywołująca musi zostać przetestowana, aby sprawdzić, czy wywołuje fabrykę, a następnie wymagane metody na zwróconej klasie. Nie musi nic wiedzieć o realizacji samej fabryki ani konkretnych klasach.
Rozciągliwość. Gdy ktoś decyduje, że musimy dodać nową klasę D do tej fabryki, nigdy nie trzeba mówić o żadnym kodzie wywołującym, ani testach jednostkowych, ani implementacji. Po prostu tworzymy nową klasę D i rozszerzamy naszą metodę fabryczną. To jest właśnie definicja zasady otwartego i zamkniętego .
Możesz nawet utworzyć nową klasę fabryczną i sprawić, by były wymienialne podczas pracy, jeśli sytuacja tego wymaga - na przykład, jeśli chcesz mieć możliwość włączania i wyłączania klasy D podczas testowania. Natrafiłem na tę sytuację tylko raz, ale była ona bardzo przydatna.
Jak już powiedziano, Wzorzec Fabryczny nie zawsze jest właściwą drogą. Ale gdziekolwiek zobaczysz warunkową instancję, powinieneś się nad tym zastanowić.