Dieser Artikel bietet Ihnen eine detaillierte Analyse des Adaptermodus in PHP (mit Code). Ich hoffe, dass er für Freunde hilfreich ist.
Adaptermuster (PHP-Implementierung)
z. B.
//Zielrolle
1. Die Schnittstelle verfügt über mehrere Methoden
// Quellrolle
1. Besitzt nur einige Methoden
//Adapterrolle
1 Delegiert Aufrufe an Methoden, die bereits in der Quellrolle vorhanden sind
2 . Adapterrolle Es sind andere Methoden erforderlich, um Clients hinzuzufügen
1. Statische Methoden festlegen
3 Konstruktion Die Methode wird in den
Adaptermodus eingefügt: Konvertieren Sie die Schnittstelle einer Klasse in die Schnittstelle einer anderen Klasse, die der Kunde erwartet. Adapter ermöglichen die nahtlose Zusammenarbeit von Klassen mit ursprünglich inkompatiblen Schnittstellen.
[Hauptrollen im Adaptermuster]
Zielrolle: Definieren Sie die vom Client verwendeten Schnittstellen in Bezug auf bestimmte Felder. Das erwarten wir
Quelle (Adaptee). Rolle: Die Schnittstelle, die angepasst werden muss
Rolle des Adapters (Adapter): Passt die Adaptee-Schnittstelle und die Zielschnittstelle an. Der Adapter ist der Kern dieses Modells, und der Adapter konvertiert die Quellschnittstelle in die Zielschnittstelle , diese Rolle ist eine konkrete Klasse.
Tatsächlich gibt es eine Steckdose mit zwei Anschlüssen (Adaptee) an der Wand Ihres Hauses, aber Sie haben einen elektrischen Ventilator (Target) gekauft, der drei Anschlüsse benötigt. In diesem Fall benötigen Sie eine Steckdose (Adapter). ).
Der Klassenadapter verwendet die Implementierungsmethode „Mehrfachvererbung“, die eine unerwünscht hohe Kopplung mit sich bringt, sodass seine Verwendung im Allgemeinen nicht empfohlen wird. Der Objektadapter verwendet die Methode „Objektkombination“, die eher dem Geist der losen Kopplung entspricht.
Der Klassenadapter verwendet Vererbung
z. B.:
/** * 目标角色 */ interface Target { /** * 源类也有的方法1 */ public function sampleMethod1(); /** * 源类没有的方法2 */ public function sampleMethod2(); } /** * 源角色 */ class Adaptee { /** * 源类含有的方法 */ public function sampleMethod1() { echo 'Adaptee sampleMethod1 <br />'; } } /** * 类适配器角色 */ class Adapter extends Adaptee implements Target { /** * 源类中没有sampleMethod2方法,在此补充 */ public function sampleMethod2() { echo 'Adapter sampleMethod2 <br />'; } } class Client { /** * Main program. */ public static function main() { $adapter = new Adapter(); $adapter->sampleMethod1(); $adapter->sampleMethod2(); } }
Der Objektadapter verwendet Delegation
z. B.:
/** * 目标角色 */ interface Target { /** * 源类也有的方法1 */ public function sampleMethod1(); /** * 源类没有的方法2 */ public function sampleMethod2(); } /** * 源角色 */ class Adaptee { /** * 源类含有的方法 */ public function sampleMethod1() { echo 'Adaptee sampleMethod1 <br />'; } } /** * 类适配器角色 */ class Adapter implements Target { private $_adaptee; public function __construct(Adaptee $adaptee) { $this->_adaptee = $adaptee; } /** * 委派调用Adaptee的sampleMethod1方法 */ public function sampleMethod1() { $this->_adaptee->sampleMethod1(); } /** * 源类中没有sampleMethod2方法,在此补充 */ public function sampleMethod2() { echo 'Adapter sampleMethod2 <br />'; } } class Client { /** * Main program. */ public static function main() { $adaptee = new Adaptee(); $adapter = new Adapter($adaptee); $adapter->sampleMethod1(); $adapter->sampleMethod2(); } }
Verwandte Empfehlungen:
Wie generiert PHP Klassen für HTML-Dateien? So generieren Sie eine HTML-Dateiklasse in PHPWie debugge ich PHP-Code? Zusammenfassung der PHP-Code-Debugging-Methoden (empfohlen)
Das obige ist der detaillierte Inhalt vonDetaillierte Analyse des Adaptermusters in PHP (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!