Heim  >  Artikel  >  Backend-Entwicklung  >  Werfen wir einen Blick auf das Adaptermuster der PHP-Entwurfsmuster

Werfen wir einen Blick auf das Adaptermuster der PHP-Entwurfsmuster

coldplay.xixi
coldplay.xixinach vorne
2020-06-30 17:42:342721Durchsuche

Werfen wir einen Blick auf das Adaptermuster der PHP-Entwurfsmuster

Adaptermuster des PHP-Entwurfsmusters

  1. Einführung in Lebensszenarioprobleme:

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

    Prinzip:
Konvertieren Sie a Typ der Schnittstelle wird in eine andere Schnittstelle konvertiert, sodass die Klassen, deren ursprüngliche Schnittstellen inkompatibel sind, kompatibel sein können.

Der Benutzer ruft die vom Adapter konvertierte Zielschnittstellenmethode auf, und der Adapter ruft dann die entsprechende Schnittstellenmethode der angepassten Person auf

    Vorteile:
Der Benutzer ist Der Adaptee ist nicht sichtbar und es handelt sich um einen entkoppelten Vorgang

  1. Das Adaptermuster ist ein strukturelles Entwurfsmuster

  2. Drei Typen von Adaptermustern Implementierungsmethode

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:

PHP-Programmierung vom Einstieg bis zur Kompetenz

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen