Heim > Artikel > Backend-Entwicklung > Erfahren Sie in einem Artikel mehr über das Adaptermuster in PHP
Im vorherigen Artikel „Ein kurzer Vortrag über das Decorator-Muster in PHP“ haben wir das Decorator-Muster in PHP vorgestellt. Dieser Artikel führt Sie zum Verständnis des Adaptermusters in PHP.
Dieses Modell hatte schon immer ein sehr klassisches Vorbild, und das ist der Sockel! Richtig, wenn wir Elektrogeräte im Ausland kaufen oder geschäftlich ins Ausland reisen, benötigen wir oft einen Netzadapter, da in unserem Land die Spannungsnorm 220 Volt beträgt, während in anderen Ländern die Spannungsnorm 110 Volt beträgt. Und dieses Netzteil ist ein Symbol für den Adaptermodus. Wenn das Objekt die Anforderungen nicht erfüllt, fügen Sie einen Adapter hinzu! !
GoF-Definition: Konvertieren Sie die Schnittstelle einer Klasse in eine andere Schnittstelle, die der Kunde wünscht. Das Adaptermuster ermöglicht die Zusammenarbeit von Klassen, die ursprünglich aufgrund inkompatibler Schnittstellen nicht zusammenarbeiten konnten interface Target{
function Request() : void;
}
Definieren Sie einen Schnittstellenvertrag, der auch eine normale Klasse mit Implementierungsmethoden sein kann (wir werden Klassen in den folgenden Beispielen verwenden)
class Adapter implements Target{ private $adaptee; function __constuct($adaptee){ $this->adaptee = $adaptee; } function Request() : void { $this->adaptee->SpecificRequest(); } }
Der Adapter implementiert diesen Schnittstellenvertrag, damit die Methode Request() implementiert werden kann, aber bitte beachten Sie, dass wir Eigentlich ist call eine Methode in der Adaptee-Klasse. class Adaptee {
function SpecificRequest() : void{
echo "I'm China Standard!";
}
}
Der Adaptermodus ist eigentlich leicht zu verstehen, der Code hat wirklich nur so viel
Lassen Sie uns noch einmal über meine Handyfabrik sprechen, unser Geschäft ist dieses Mal wirklich gewachsen! Es wurde nach Thailand, Singapur und Indonesien verkauft. Wir sind jedenfalls überall dort zu finden, wo es Curry gibt. Es heißt, wir hätten eine Curryfarbe hergestellt. Der Muschelwechsel ist nicht ausschließlich auf den Einfluss von Noah zurückzuführen, aber nach langfristiger Forschung haben wir herausgefunden, dass sich unterschiedliche Farben an verschiedenen Orten besser verkaufen lassen. Deshalb hat Foxconn für uns einen Sprühadapter (Adapter) in der Original-Handyhüllen-Produktionslinie (Target) installiert. Wenn wir Hüllen in anderen Farben benötigen, benötigen wir diesen Adapter nur zum Wechseln verschiedener Farben (Adaptee). Installieren Sie diesen Sprüher direkt. und ein neues farbiges Mobiltelefon ist geboren. Wenn wir unser Geschäft in ein anderes Land ausdehnen, müssen wir nur die Farbe wechseln. Wenn es zu lange dauert, tauschen wir auch die Düse aus (denken Sie an den Dauerdrucker)
Vollständiger Code: Adaptermodus
https:/ /github .com/zhangyue0503/designpatterns-php/blob/master/05.adapter/source/adapter.php Beispiel
Vollständiger Quellcode: SMS-Versandadaptermethodehttps://github.com/zhangyue0503/designpatterns-php/blob/master/05.adapter/source/adapter- Nachricht .php<?php class Message{ public function send(){ echo "阿里云发送短信!" . PHP_EOL; } public function push(){ echo "阿里云发送推送!" . PHP_EOL; } } class JiguangSDKAdapter extends Message{ private $message; public function __construct($message){ $this->message = $message; } public function send(){ $this->message->send_out_msg(); } public function push(){ $this->message->push_msg(); } } class JiguangMessage{ public function send_out_msg(){ echo "极光发送短信!" . PHP_EOL; } public function push_msg(){ echo "极光发送推送!" . PHP_EOL; } } class BaiduYunSDKAdapter extends Message{ private $message; public function __construct($message){ $this->message = $message; } public function send(){ $this->message->transmission_msg(); } public function push(){ $this->message->transmission_push(); } } class BaiduYunMessage{ public function transmission_msg(){ echo "百度云发送短信!" . PHP_EOL; } public function transmission_push(){ echo "百度云发送推送!" . PHP_EOL; } } $jiguangMessage = new JiguangMessage(); $baiduYunMessage = new BaiduYunMessage(); $message = new Message(); // 原来的老系统发短信,使用阿里云 $message->send(); $message->push(); // 部分模块用极光发吧 $jgAdatper = new JiguangSDKAdapter($jiguangMessage); $jgAdatper->send(); $jgAdatper->push(); // 部分模块用百度云发吧 $bdAatper = new BaiduYunSDKAdapter($baiduYunMessage); $bdAatper->send(); $bdAatper->push();
Das obige ist der detaillierte Inhalt vonErfahren Sie in einem Artikel mehr über das Adaptermuster in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!