Middle+
'Adaptör' ve 'dekoratör' desenleri arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Adapter bir sınıfın arayüzünü başka bir sınıfın beklediği arayüze dönüştürür ve uyumsuz arayüzlere sahip sınıflar arasında uyumluluk sağlar. Mevcut metodların imzasını yeni arayüze uygun hale getirmek için değiştirir.
Dekoratör nesneye dinamik olarak yeni sorumluluklar ekler, onu dekoratör ile sarmalayarak. Dekor edilen nesnenin arayüzünü değiştirmez, sadece işlevselliğini genişletir.
| Kriter | Adaptör | Dekoratör |
|---|---|---|
| Hedef | Arayüz uyumluluğu | İşlevselliğin genişletilmesi |
| Arayüz değişikliği | Evet, bir arayüzü diğerine dönüştürür | Hayır, mevcut arayüzü korur |
| Yapı | Uyum sağlanan nesneyi sarmalar | Dekore edilen nesneyi sarmalar |
| Davranış | Çağrıları değiştirir veya yönlendirir | Yeni işlemler ekler veya mevcutları değiştirir |
| Örnek | XML'den JSON'a dönüşüm | Mevcut bir sınıfa logging ekleme |
<?php
// Adaptör örneği
interface TargetInterface {
public function request();
}
class Adaptee {
public function specificRequest() {
echo "Özel Adaptee isteği" . PHP_EOL;
}
}
class Adapter implements TargetInterface {
private $adaptee;
public function __construct(Adaptee $adaptee) {
$this->adaptee = $adaptee;
}
public function request() {
// Çağrıyı dönüştürme
$this->adaptee->specificRequest();
}
}
// Dekoratör örneği
interface Component {
public function operation();
}
class ConcreteComponent implements Component {
public function operation() {
echo "Somut bileşen işlemi" . PHP_EOL;
}
}
class Decorator implements Component {
protected $component;
public function __construct(Component $component) {
$this->component = $component;
}
public function operation() {
$this->component->operation();
}
}
class ConcreteDecoratorA extends Decorator {
public function operation() {
parent::operation();
$this->addedBehaviorA();
}
private function addedBehaviorA() {
echo "Eklendi davranış A" . PHP_EOL;
}
}