phpDecorate design pattern ile bir sınıfa başka bir sınıfı gömerek o sınıfa yeni bir sınıfın özelliklerini katmaya decorate pattern denir.

Decorate design pattern için bir interface tanımlayalım. Bu interface sabit bir metot içereceği için basit şekilde vereceğiz tabi siz kendinize göre oluşturabilirsiniz.

< ?php
interface isimDecorate
{
	public function __construct(isim $isim);
}
?>

yukarıdaki interface de bir yapılandırıcı metot tanımladık ve bu metota adı isim olan bir sınıfın geleceğini belirttik. Şimdi de interface için uygun bir sınıf yazalım.

< ?php
class isimDecorateClass implements isimDecorate
{
	public $isim;
 
	public function __construct(isim $isim)
	{
		$this->isim = $isim;
	}
}
?>

yukarıdaki isim sınıfımızı mevcut arayüzümüze göre yazdık. Yapılandırıcı metoduna isim adında bir sınıfın geleceğini ve bu gelen sınıfı da isimDecorate sınıfımızın içindeki publictanımlı $isim e aktaracağız.

Şimdide isim sınıfımızı tanımlayalım.

< ?php
class isim
{
	private $ad;
	private $soyad;
 
	public function adTanimla($ad)
	{
		$this->ad = $ad;
		return $this;
	}
 
	public function soyadTanimla($soyad)
	{
		$this->soyad = $soyad;
		return $this;
	}
 
	public function adVeSoyadGetir()
	{
		echo 'Adınız: '.$this->ad.' Soyadınız: '.$this->soyad;
	}
}
?>

Mevcut sınıflarımızı artık hazırladığımıza göre şimdi ise nasıl kullanacağız ona görelim.

< ?php
$isim = new isim;
$isim->adTanimla('yusuf');
$isim->soyadTanimla('koç');
 
$isimDecorate = new isimDecorateClass($isim);
$isimDecorate->isim->adVeSoyadGetir();
?>

Evet görüldüğü üzere önce isim sınıfımızı new ile başlatıp ad ve soyad tanımladıktan sonra oluşturduğumuz bu sınıfı isimDecorate içine gömdük ve isimDecorate sınıfına isim sınıfının özelliklerini katmış olduk.

Soru ve görüşleriniz için yorumları kullanabilirsiniz :)