Sobes.tech
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;
    }
}