Simple Factory – Prosta fabryka

Wzorzec projektowy 🏰 Prosta Fabryka, znany również jako Simple Factory, to koncepcja używana w programowaniu obiektowym, która polega na tworzeniu instancji obiektów bez konieczności określania dokładnych klas obiektów. Prosta fabryka abstrahuje proces tworzenia instancji, co pozwala na większą elastyczność i łatwiejsze zarządzanie tworzeniem obiektów, szczególnie gdy istnieje wiele obiektów o podobnych interfejsach, ale różnych implementacjach.

Należy do grupy wzorców konstrukcyjnych. Niektórzy mogą się przyczepić, że prosta fabryka nie jest pełnoprawnym wzorcem projektowym, a w wielu materiałach o tej tematyce go nie znajdziecie.

Zasada Działania 🚀

Wzorzec Prosta Fabryka skupia się na jednej klasie, którą nazywamy „fabryką”. Ta klasa zawiera metodę, która decyduje, jaka instancja klasy powinna zostać stworzona na podstawie podanych argumentów. Wybór konkretnego typu obiektu jest ukryty wewnątrz metody fabrycznej, co oznacza, że użytkownik klasy fabrycznej nie musi znać wszystkich dostępnych typów obiektów ani sposobu ich tworzenia.

Zalety Używania Prostej Fabryki

Separacja odpowiedzialności: Fabryka oddziela kod odpowiedzialny za tworzenie obiektów od kodu, który z tych obiektów korzysta.
Elastyczność: Łatwo można dodać nowe klasy do systemu, które mogą być tworzone przez fabrykę, nie modyfikując istniejącego kodu korzystającego z fabryki.
Ukrycie szczegółów tworzenia: Użytkownicy fabryki nie muszą znać szczegółów dotyczących tworzenia poszczególnych obiektów.
✅ przestrzega regułę pojedynczej odpowiedzialności
✅ przestrzega regułę odwrócenia zależności
✅ przestrzega regułę DRY i gwarantuje reużywalność

Wady
❌ łamie regułę otwarte-zamknięte
❌ użyta na zaś może okazać się niepotrzebna (YAGNI)

Poniżej przedstawiam prosty przykład implementacji wzorca Prosta Fabryka w PHP, który ilustruje tworzenie różnych typów pojazdów:

interface Vehicle {
    public function getType(): string;
}

class Car implements Vehicle {
    public function getType(): string {
        return 'Car';
    }
}

class Truck implements Vehicle {
    public function getType(): string {
        return 'Truck';
    }
}

class VehicleFactory {
    public static function createVehicle(string $type): Vehicle {
        return match($type) {
            'car' => new Car(),
            'truck' => new Truck(),
            default => throw new Exception("Vehicle type not recognized"),
        };
    }
}


$car = VehicleFactory::createVehicle('car');
echo $car->getType(); 

$truck = VehicleFactory::createVehicle('truck');
echo $truck->getType(); 

W tym przykładzie, VehicleFactory jest prostą fabryką, która tworzy i zwraca instancje typów pojazdów na podstawie przekazanego argumentu. Interfejs Vehicle gwarantuje, że wszystkie tworzone pojazdy będą miały metodę getType, ale każda konkretna klasa (jak Car czy Truck) może mieć różną implementację tej metody.

Wzorzec Prosta Fabryka jest użytecznym 🔨 narzędziem w arsenale programisty, oferującym czytelne i elastyczne podejście do tworzenia obiektów. Ułatwia rozbudowę aplikacji, jednocześnie zachowując porządek i przejrzystość w kodzie, co jest szczególnie ważne w większych systemach i aplikacjach.

Moje początki programowania sięgają 2010r. W trakcie wielu projektów zdobywałem doświadczenie, rozwijając nie tylko umiejętności techniczne, ale także kompetencje miękkie. Programuje głównie w PHP i Python.