Middle+
'Adapter' və 'decorator' nümunələri arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Adapter bir sinfin interfeysini digər sinfin gözlədiyi interfeysə çevirir və uyğunsuz interfeysə malik sinflər arasında uyğunluğu təmin edir. Mövcud metodların imzalarını yeni interfeysə uyğunlaşdırmaq üçün dəyişdirir.
Dekorator obyektə dinamik olaraq yeni vəzifələr əlavə edir, onu dekorator ilə örtür. Dekorasiya olunan obyektin interfeysini dəyişmir, sadəcə funksionallığını genişləndirir.
| Kriteriya | Adapter | Dekorator |
|---|---|---|
| Hədəf | Interfeys uyğunluğu | Funksionallığın genişləndirilməsi |
| İnterfeys dəyişiklikləri | Bəli, birini digərinə çevirir | Xeyr, mövcud interfeysi 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ə logging ə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;
}
}