Wenn Sie müssen gehen Wenn Sie im Ausland reisen und spielen, gibt es mittlerweile viele elektronische Produkte, aber jedes elektronische Produkt benötigt eine Stromquelle, um es anzutreiben, wie z. B. Mobiltelefone, Computer und Kameras. . . Aber es gibt noch ein weiteres sehr offensichtliches Problem. Wenn der Strom ausfällt, müssen sie in unserem Land aufgeladen werden Die Welt ist sehr groß und die Anforderungen (Vorschriften)
von Land zu Land sind unterschiedlich. In den Vereinigten Staaten gibt es beispielsweise 120 V
1. Klassenadapter
Gemäß dem UML-Diagramm oben, wir Wie Sie sehen können, ist eine US-Spannungsschnittstelle, eine Adapterklasse UsaInterface
, eine chinesische Spannungsschnittstelle Adapter
, ein Benutzer Chine
, Computer
erforderlich. Hier ist die chinesische Spannung der Adapter und die USA Spannung ist Die endgültige Ausgabe (Ziel) ist der Konfigurator
interface UsaInterface{ public function outPut5V();}class China{ private $voltage = 220; public function outPut220V() { return $this->voltage; }}class Adapter extends China implements UsaInterface{ public function outPut5V() { // TODO: Implement outPut5V() method. $chinaVoltage = $this->outPut220V(); return $chinaVoltage / 2 + 10 . "V"; }}class Computer{ public function index(UsaInterface $usa) { if ($usa->outPut5V() === "120V") { printf("可以在美国使用中国的电源插头给电脑充电了"); } else { printf("不可以在美国使用中国的电源插头给电脑充电了"); } }}class Client{ public function __construct() { $adapter = new Adapter(); $computer = new Computer(); $computer->index($adapter); }}
2. Objektadaptermuster
Der Objektadapter ist eigentlich eine Anpassung des Klassenadaptermusters Die Adapterklasse erbt nicht die Klasse des Adaptee, sondern lässt sie miteinander kombinieren. Dies erhöht die Flexibilität der Verwendung Adapter
und macht nicht viele Methoden des Adaptee verfügbar (die Verwendung einer Assoziationsbeziehung ersetzt die Vererbungsbeziehung [Synthese-Wiederverwendungsprinzip). ]). Gleichzeitig gibt es ohne Vererbung keine Möglichkeit, das Methodenumschreiben der übergeordneten Klasse zu überschreiben, was als eine gute Sache und eine schlechte Sache angesehen werden kann. Wie folgt:
class Adapter implements UsaInterface{ protected $china; public function __construct(China $china) { $this->china = $china; } public function outPut5V() { // TODO: Implement outPut5V() method. $chinaVoltage = $this->china->outPut220V(); return $chinaVoltage / 2 + 10 . "V"; }}
3. Schnittstellenadapter (Standardadaptermodus)
Wenn Sie nicht alle von der Schnittstelle bereitgestellten Methoden implementieren müssen, können Sie zunächst entwerfen eine abstrakte Klasse zum Implementieren der Schnittstelle und stellt eine standardmäßige leere Methodenimplementierung für die Schnittstelle bereit. Durch Ändern der Untermethoden der abstrakten Klasse können dann bestimmte-Methoden der übergeordneten Klasse selektiv überschrieben werden, um die Anforderungen zu erfüllen (gilt für Situationen, in denen Eine Schnittstelle möchte nicht alle Methoden verwenden)
Verwandte Lernempfehlungen:
Das obige ist der detaillierte Inhalt vonWerfen wir einen Blick auf das Adaptermuster der PHP-Entwurfsmuster. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!