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;
}
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.phpBeispielVollstä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();Nach dem Login kopierenBeschreibung:
PHP-Video-Tutorial
- In diesem Beispiel haben wir zwei Adapter, weil wir zwei SDKs anpassen müssen. Wer sagt, dass es nur einen Stromwandler geben kann? Erben Sie die Message-Klasse, da es sich bei der Message-Klasse um zuvor geschriebenen Code handelt und möglicherweise einige öffentliche Methoden darin enthalten sind, sodass keine Schnittstellenabstraktion erfolgt. Sie können beim Refactoring des Codes das Extrahieren einer abstrakten Schnittstelle in Betracht ziehen. Dies dient jedoch nur dazu, zu demonstrieren, dass der Adapter möglicherweise nicht nur auf die Schnittstelle abzielen kann, solange diese mit dem ursprünglichen Objekt übereinstimmt. Es ist in Ordnung, nichts zu erben . Schließlich sind wir eine schwach typisierte Sprache. Wenn es sich um einen starken Typ handelt, der Java ähnelt, ist immer noch Vererbung oder Implementierung erforderlich (Polymorphismus).
- Kombinierte Adapter ähneln Dekoratoren, sie verwalten ein externes Objekt und Dekoratoren Zum Hinzufügen von Funktionen werden die ursprünglichen Methoden in der Klasse verwendet, während Adapter selten das Filesystem-Modul in
- Laravel ersetzen. Ich denke, dazu gibt es nicht viel zu sagen Jeder, der das Adaptermuster verwendet, sollte es sorgfältig studieren.
- Wenn Sie eine Klasse verwenden möchten, deren Inhalt jedoch nicht zu Ihrem Unternehmen passt, oder wenn Sie eine Klasse erstellen möchten, die mit anderen Klassen verwendet werden kann Wenn Klassen oder unvorhergesehene Klassen zusammenarbeiten, können Sie auch das Adaptermuster ausprobieren
- Empfohlenes Lernen: „
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!