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;
}
}