Sobes.tech
Middle+

Kāda ir atšķirība starp modeļiem 'adapteris' un 'decorators'?

sobes.tech AI

Atbilde no AI

Adapteris pārveido viena klases saskarni tā, kādu sagaida cita klase, nodrošinot saderību starp nesaderīgiem saskarnēm. Maina esošo metožu parakstus, lai tie atbilstu jaunajai saskarnei.

Dekorators dinamiski pievieno jaunas atbildības objektam, to ietverot dekoratorā. Nemaina dekorētā objekta saskarni, tikai paplašina tā funkcionalitāti.

Kritērijs Adapteris Dekorators
Mērķis Saskarnes saderība Funkcionalitātes paplašināšana
Saskarnes maiņa Jā, pārvērš vienu otru Nē, saglabā esošo
Struktūra Ietver pielāgotā objektu Ietver dekorēto objektu
Uzvedība Maina izsaukumus pielāgotajam objektam Pievieno jaunas darbības vai maina esošās
Piemērs XML pārveidošana JSON formātā Pievieno žurnālošanu esošajai klasei
<?php

// Adaptera piemērs
interface TargetInterface {
    public function request();
}

class Adaptee {
    public function specificRequest() {
        echo "Adaptee specifiskais pieprasījums" . PHP_EOL;
    }
}

class Adapter implements TargetInterface {
    private $adaptee;

    public function __construct(Adaptee $adaptee) {
        $this->adaptee = $adaptee;
    }

    public function request() {
        // Pārvērst izsaukumu
        $this->adaptee->specificRequest();
    }
}

// Dekoratora piemērs
interface Component {
    public function operation();
}

class ConcreteComponent implements Component {
    public function operation() {
        echo "Konkretās komponentes darbība" . 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 "Pievienots uzvedības A" . PHP_EOL;
    }
}