Zpo-11-wyk-Slajd43
Replace Constructor with Factory Method
Przekształcenie to pozwala zmienić sposób tworzenia obiektu pewnej klasy (i jej podklas) z wywołania konstruktora na użycie wzorca Factory Method. Dzięki niemu możliwe jest stworzenie logicznego konstruktora – metody, która, w odróżnieniu od "zwykłego" konstruktora może zachowywać się polimorficznie, a także dokonywać wyboru konkretnej klasy (wśród klas posiadających ten sam typ, np. dziedziczonych). Zwykły konstruktor w momencie wywołania operuje na utworzonym już obiekcie własnej klasy, dlatego takiej możliwości nie posiada. Zatem celem przekształcenia jest zastąpienie konstruktora jako metody tworzenia obiektów przez klientów – wywołaniem metody-fabryki.
Przekształcenie składa się z trzech kroków. Pierwszym jest stworzenie metody-fabryki (czyli zwykle metody statycznej przyjmującej parametry pozwalające dokonać wyboru klasy, i które można przekazać konstruktorowi), która jedynie wywołuje konstruktor. Następnie wywołania konstruktora w kodzie klientów są zastępowane wywołaniami metody-fabryki. Aby uniemożliwić tworzenie obiektów bez pośrednictwa metody-fabryki, należy zadeklarować konstruktor jako prywatny.
Po wykonaniu przekształcenia można rozwijać logikę metody-fabryki: wyposażyć ją w pamięć utworzonych obiektów lub dokonywać w niej wyboru klasy tworzonego obiektu.