Decorator deseni
Miras almadan davranış ekleyen Decorator desenini öğrenirsin.
Decorator deseni ne yapar?
Decorator deseni miras almadan bir nesneye yeni davranış ekler. Temel sınıfı değiştirmeden, onu saran (wrap) sarmalayıcılar katarak davranışı zenginleştirirsin.
Bütün parçalar ortak bir Component arayüzünü uygular. ConcreteComponent temel davranışı taşır; Decorator sınıfı içeride bir Component örneği tutar ve ona işi devreder. Böylece decorator bir component gibi kullanılır ama davranışı özelleştirir.
ConcreteDecorator ile davranış ekle
Somut decorator, Decorator sınıfını genişletir (extends) ve operation yöntemini yeniden yazar. Genellikle parent::operation() çağırıp sonucu değiştirir; böylece içteki component'in davranışına yeni bir parça ekler.
Örneğin ConcreteDecorator, iç component'in 'merhaba' çıktısına '+imza' ekleyebilir. İçerideki component aynı kalır; decorator onu sararak çıktıyı zenginleştirir.
Uygulama Decorator ile davranış ekle
Bir Component arayüzü yaz (operation(): string yöntemi olsun). ConcreteComponent 'merhaba' döndürsün. Decorator sınıfı Component arayüzünü uygulasın ve kurucuda iç component'i tutsun. ConcreteDecorator extends Decorator olsun; operation yönteminde parent::operation() . '+imza' döndürsün. Sarmalı çağır ve sonucu yazdır.
Örnek çözümü göster
string; } yaz. ConcreteComponent 'merhaba' döndürsün. Decorator implements Component, kurucuda Component $inner tutsun, operation iç component'i çağırır. ConcreteDecorator extends Decorator, operation içinde parent::operation() . '+imza' döndürür.
Örnek çözüm:
<?php
interface Component {
public function operation(): string;
}
class ConcreteComponent implements Component {
public function operation(): string { return 'merhaba'; }
}
class Decorator implements Component {
public function __construct(private Component $inner) {}
public function operation(): string { return $this->inner->operation(); }
}
class ConcreteDecorator extends Decorator {
public function operation(): string { return parent::operation() . '+imza'; }
}
$c = new ConcreteDecorator(new ConcreteComponent());
echo $c->operation();
Kendini test et
-
Decorator'ün uyguladığı arayüz
<?php class Decorator implements ____ { public function __construct(private Component $inner) {} public function operation(): string { return $this->inner->operation(); } }Cevabı göster
<?php class Decorator implements Component { public function __construct(private Component $inner) {} public function operation(): string { return $this->inner->operation(); } } -
Decorator kavramlarını eşleştir
- Component
- ortak arayüz
- ConcreteComponent
- temel davranış
- Decorator
- sarmalayıcı
- operation
- davranışı uygular
-
Decorator deseni ne yapar?
- Sınıfı bellekten siler
- Miras almadan davranış ekler
- Tek örnek guarantee eder
- Dış arayüze uyum sağlar
Cevabı göster
Miras almadan davranış ekler — Doğru. Decorator miras almadan davranış ekler.