Middle+
'Adapter' va 'dekartor' shablonlari orasidagi farq nima?
sobes.tech AI
AIdan javob
Adapter bir sinfin arayüzünü, başka bir sinfin 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 imzalarını yeni arayüze uygun hale getirmek için değiştirir.
Dekorator nesneye dinamik olarak yeni sorumluluklar ekler, onu dekorator ile sarmalayarak. Dekore edilen nesnenin arayüzünü değiştirmez, sadece işlevselliğini genişletir.
| Kriter | Adapter | Dekorator |
|---|---|---|
| Hədəf | Arayüz uyumluluğu | Funksionallığın genişləndirilməsi |
| Arayüz dəyişiklikləri | Bəli, birini digərinə çevirir | Xeyr, mövcud arayüzü saxlayır |
| Struktura | Uyğunlaşdırılan obyekti sarmalayır | Dekorasiya olunan obyekti sarmalayır |
| Davranış | Çağrıları dəyişdirir və ya yönəldir | Yeni əməliyyatlar əlavə edir və ya mövcudları dəyişdirir |
| Nümunə | XML-dən JSON-ə çevirmə | Mövcud sinfə loqlaşdırma əlavə etmək |
<?php
// Adapter nümunəsi
interface TargetInterface {
public function request();
}
class Adaptee {
public function specificRequest() {
echo "Xüsusi Adaptee tələbi" . PHP_EOL;
}
}
class Adapter implements TargetInterface {
private $adaptee;
public function __construct(Adaptee $adaptee) {
$this->adaptee = $adaptee;
}
public function request() {
// Çağırışın çevrilməsi
$this->adaptee->specificRequest();
}
}
// Dekorator nümunəsi
interface Component {
public function operation();
}
class ConcreteComponent implements Component {
public function operation() {
echo "Konkret komponentin əməliyyatı" . 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 "Əlavə olunan davranış A" . PHP_EOL;
}
}