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.

Jedna odpowiedź do “Wzorzec projektowy Fabryka abstrakcyjna”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *