Decorator

Z PHPEdia.pl
Skocz do: nawigacji, wyszukiwania

przykładowa implementacja

<?php
 
/**
 * Kod opracowano na podstawie książki "Projektowani zorientowane obiektowo - Wzorce Projektowe, wydawnictwa HELION
 * @link http://helion.pl/ksiazki/probw2.htm
 */
abstract class Dekorator
{
	private $komponent;
 
	public function __construct( $komponent )
	{
		$this->komponent = $komponent;
	}
 
	public function wywolaj()
	{
		if( $this->komponent != null) $this->komponent->drukuj();
	}
}
 
class Naglowek1 extends Dekorator
{
	public function __construct( $komponent )
	{
		parent::__construct( $komponent );
	}
 
	public function drukuj()
	{
		echo 'naglowek1<br />';
		parent::wywolaj();
	}
}
 
class Stopka1 extends Dekorator
{
	public function __construct( $komponent )
	{
		parent::__construct( $komponent );
	}
 
	public function drukuj()
	{
		parent::wywolaj();
		echo 'stopka1<br />';
	}
}
 
class Stopka2 extends Dekorator
{
	public function __construct( $komponent )
	{
		parent::__construct( $komponent );
	}
 
	public function drukuj()
	{
		parent::wywolaj();
		echo 'stopka2<br />';
	}
}
 
class Naglowek2 extends Dekorator
{
	public function __construct( $komponent )
	{
		parent::__construct( $komponent );
	}
 
	public function drukuj()
	{
		echo 'naglowek2<br />';
		parent::wywolaj();
	}
}
 
class Potwierdzenie
{
	public function drukuj()
	{
		echo 'potwierdzenie<br />';
	}
}
 
/**
 * przykładowe użycie:
 */
$test = new Stopka1( new Naglowek1( new Naglowek2( new Stopka2( new Potwierdzenie() ) ) ) );
$test->drukuj();
 
/* Wynik: */
naglowek1
naglowek2
potwierdzenie
stopka2
stopka1
?>
Proponuje pobawic się kolejnościć wywośywania klas.

Strona ta opisuje jeden z Wzorców projektowych.

Wzorce projektowe: Definicja | Zalety | Podział wzorców | Lista wzorców

Wiki letter w.png To jest tylko zalążek artykułu. Jeśli możesz, rozbuduj go.