Prototype
Z PHPEdia.pl
Spis treści |
Charakterystyka
Metody Prototypu (ang. Prototype) zwracają klon obiektu przekazanego jako argument. Może być on ewentualnie nieznacznie zmodyfikowany.
Założenia
Wzorzec pozwala na:
- tworzenie zmodyfikowanych klonów obiektów
- głębokie/płytkie klonowanie
przykładowe implementacje
<?php abstract class MojaKlasa { /** * @var string * @access public * Zmienna zawierająca nazwę naszego obiektu */ public $nazwa; /** * @return void * @access public * Drukuje nazwe obiektu na 'standardowe' wyjście ;) */ public function Nazwa() { echo "To jest " . $this->nazwa . "\n"; } } final class Obiekt extends MojaKlasa { /** * @return void * @access public * Tworzy nowa instancje Obiekt i nadaje mu nazwę "Oryginał" */ public function __construct() { $this->nazwa = "oryginał"; } } class Prototyp { /** * @return MojaKlasa Sklonowany obiekt o nowych właściwościach. * @access public * @param MojaKlasa Obiekt, który zostanie poddany klonowaniu i modyfikacji. * Tworzy kopie obiektu MojaKlasa poprzez płytkie klonowanie, * nadając mu nazwę 'Kopia' i modyfikując w ten sposób jego właściwości. */ static public function Klonuj(MojaKlasa $obiekt) { $klon = clone $obiekt; $klon->nazwa = "klon"; return $klon; } } /** * Tworzymy nowy obiekt a następnie klonujemy go dzięki wzorcowi Prototyp. */ $klasa = new Obiekt(); $klon = Prototyp::Klonuj($klasa); /** * Sprawdzamy czy mamy do czynienia z oryginałem czy kopia. */ $klasa->Nazwa(); $klon->Nazwa(); ?>
Wyjście tego skryptu jest następujące:
To jest oryginał To jest klon
Kiedy używać
Wtedy, kiedy tworzenie nowej instancji klasy "nie opłaca" się ze względu na narzut czasowy. Takimi przykładowymi sytuacjami jest wyciąganie wielu rekordów z bazy danych. Zwrócona instancja klasy reprezentującej wynik zapytania, może zostać sklonowana i poddana różnorodnym przekształceniom/operacjom.
Zaprezentowane w przykładzie płytkie klonowanie (z użyciem clone), może zostać zastąpione przez głębokie klonowanie np. serializację obiektu a następnie jego zapis do pliku i powtórne wykorzystanie w przyszłości.
Strona ta opisuje jeden z Wzorców projektowych.
Wzorce projektowe: Definicja | Zalety | Podział wzorców | Lista wzorców
