Kategorie
PHP Wzorce projektowe

Wzorzec projektowy Fabryka abstrakcyjna

Poprzedni wpis dotyczył wzorca projektowego Singleton, który jest niezbędny w przypadku pojedynczych obiektów tego samego typu. Obecny tekst porusza problem tworzenia różnych obiektów jednego typu (tej samej rodziny) bez specyfikowania ich konkretnych klas.

Fabryka abstrakcyjna

Plusem wykorzystania wzorca fabryki abstrakcyjnej jest możliwość ukrycia szczegółów implementacyjnych klas reprezentujących dany produkt. W ten sposób klient widzi tylko interfejs. Ukryte zostają również nazwy klas, co odizolowuje klienta od problemu określenia, do której klasy należy obiekt.

<?php
interface IUser {
    function getName();
}

class User implements IUser {
    public function __construct($id) { }

    public function getName() {
        return 'Jacek';
    }
}

class UserFactory {
    public static function create($id) {
        return new User($id);
    }
}
?>

Klasa User zaprezentowana powyżej implementuje interfejs IUser, który zawiera metodę getName(). Tworzenie nowego obiektu użytkownika odbywa się poprzez statyczną metodę create(). Szczegóły tworzenia użytkowników ukryte są w klasie User fabryki.

Podsumowanie

Istnieje prosta metoda sprawdzenia czy klasa działa poprawnie.

<?php
$oUser = UserFactory::create(1);
echo($oUser->getName());
?>

Poniższy wydruk pokazuje, że dokładnie tak się dzieje.

Jacek

Wzorzec projektowy fabryki abstrakcyjnej kładzie nacisk na tworzenie produktów z konkretnej rodziny.

W odpowiedzi na “Wzorzec projektowy Fabryka abstrakcyjna”

[…] Fabryka to jeden z popularniejszych wzorców projektowych. W sieci znajdziemy wiele możliwości implementacji i sposób jego wykorzystania. Operacje bazodanowe w aplikacjach internetowych to częste działanie, dlatego opracowanie uniwersalnej koncepcji zarządzania rekordami czy całymi kolekcjami danych jest przydatne. Taki scenariusz dobrze rozwiązuje właśnie wzorzec projektowy – Fabryka. […]

Możliwość komentowania została wyłączona.