[Text]
Wir wissen, dass das wichtigste und am schwierigsten zu verwendende UI-Steuerelement in Android das ListView-Listensteuerelement ist. Wenn Sie es flexibel verwenden möchten, müssen Sie einen Adapter verwenden. Daher denke ich, dass es immer noch notwendig ist, das Adaptermuster in Java zu lernen (unabhängig davon, ob es in Zukunft verwendet werden kann). Schließlich ist die Java-Sprache eine sehr wichtige Grundlage für die Android-Entwicklung.
Um das Adaptermuster vollständig zu verstehen, müssen Sie viel Wissen lernen, zum Beispiel: Das Adaptermuster hat zwei verschiedene Formen: Klassenadaptermuster und Objektadaptermuster. Aber als Anfänger werde ich einfach die Einführungskenntnisse des Orchestrierungsmodus erlernen und ihn in Zukunft weiter verbessern. Ich hoffe, dass Kinderschuhe, die auf dem Weg des Codierens Schwierigkeiten haben, sich nicht beschweren →_→
1. Adaptereinführung
•Konvertieren Sie die Schnittstelle einer Klasse in eine andere Schnittstelle, die die Kunde will. Das Adaptermuster ermöglicht die Zusammenarbeit von Klassen, die sonst aufgrund inkompatibler Schnittstellen nicht zusammenarbeiten würden.
•Das Adaptermuster wird sehr häufig in modernen Java-Frameworks verwendet. Dieser Modus eignet sich für die folgenden Szenarien: Sie möchten eine vorhandene Klasse verwenden, diese erfüllt jedoch nicht die Schnittstellenanforderungen, oder Sie müssen eine wiederverwendbare Klasse erstellen, die sich an andere Klassen anpasst, die keine geeignete Schnittstelle bereitstellen.
2. Beispiel Äpfel und Orangen
Die Idee eines Adapters lässt sich anhand des folgenden einfachen Beispiels veranschaulichen. In diesem Beispiel soll eine Orange in einen Apfel „passen“. Wie in der Abbildung unten gezeigt:
Wie Sie in der unteren Hälfte der Abbildung oben sehen können, enthält der Adapter eine Orange-Instanz und erbt die Apple-Klasse. Das orangefarbene Objekt wird in den Adapter gelegt, sodass sich die Orange wie ein Apfel verhält. Das entsprechende Logikdiagramm lautet wie folgt:
3. Beispiel für einen Steckdosenleistenstecker
In der obigen Abbildung: Wir können passieren. Der Adapter in der Mitte ermöglicht es, den Stecker auf der rechten Seite erfolgreich mit der Buchse auf der linken Seite zu verbinden.
4. Code-Implementierung des Steckeradapters
/** 适配器模式( Adapter ):将一个类的接口转换成客户希望的另外一个接口。 适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 */ class AdapterDemo{ public static void main(String[] args){ //电源A开始工作 PowerA powerA = new PowerAImpl(); start(powerA); PowerB powerB = new PowerBImpl(); PowerAAdapter pa = new PowerAAdapter(powerB); start(pa); } //定义方法:电源A工作 public static void start(PowerA powerA){ System.out.println("....一些重复的代码....."); powerA.insert(); System.out.println("....一些重复的代码.....\n"); } /** public static void start(PowerB powerB){ System.out.println("....一些重复的代码....."); powerB.connect(); System.out.println("....一些重复的代码....."); } */ } //定义适配器类 class PowerAAdapter implements PowerA{ private PowerB powerB;//要进行适配的接口 public PowerAAdapter(PowerB powerB){ this.powerB = powerB; } //实现接口PowerA,则必然要实现PowerA里面的方法 public void insert(){ powerB.connect(); } } /** 电源A接口 */ interface PowerA{ public void insert(); } class PowerAImpl implements PowerA{ public void insert(){ System.out.println("电源A接口插入,开始工作"); } } /** 电源B接口 */ interface PowerB{ public void connect(); } class PowerBImpl implements PowerB{ public void connect(){ System.out.println("电源B接口已连接,开始工作"); } }
In diesem Beispiel möchten wir, dass PowerB den Code in der Start()-Methode in PowerA aufruft Ich möchte die auskommentierten 23 und 25 Codezeilen nicht wiederholen. Zu diesem Zeitpunkt können Sie den Adaptermodus verwenden.
Erklärung des obigen Codes:
Zeile 30: Beginnen Sie mit der Definition des Adapters, der auch der Anfang des Kerncodes ist; > Zeilen 33 und 34: Übergeben Sie PowerB über die Konstruktionsmethode. Zeile 37: Da die Schnittstelle PowerA implementiert ist, muss die Methode insert() in PowerA implementiert werden
Zeile 38 des Codes: Wir rufen die connect()-Methode von PowerB in der insert()-Methode von PowerA auf
Danach bedeuten die Zeilen 10, 11 und 12 des Codes: in new When a PowerB generiert wird, übergeben wir ihn an den Adapter PowerAAdapter, starten den Adapter und dann führt PowerB den Code in den Zeilen 16, 24 und 18 aus.
Hinweis: Die Reihenfolge von 16, 24 und 18 ist nicht falsch, da wir im Adapter die 24. Codezeile durch die 17. Codezeile ersetzt haben.
Der Betriebseffekt ist wie folgt:
Ähnlich kann ich, wenn ich PowerA auch als PowerB verwenden möchte, einen anderen Adapter PowerBAdapter definieren Bidirektionalen Adapter erreichen.
5. Zusammenfassung
Der auskommentierte Code in den Zeilen 23 und 25 oben weist auf eine Menge wiederholten Code hin, der nicht der objektorientierten Denkweise entspricht. Stellen wir uns nun ein Beispiel vor: Unser Projekt war online und wird von Kunden genutzt, aber dann kamen einige neue Anforderungen hinzu. Es gibt ein OO-Prinzip für die Objektorientierung: geschlossen für Änderungen (versuchen Sie, den Code nicht zu ändern, nachdem er online geschaltet wurde, da sonst eine Kettenreaktion auftreten kann, die zu Problemen in anderen Codes führt, die die Methode hier aufrufen) und offen für Erweiterungen (neu). (von Ihnen selbst definierter Code) Die Methode wurde nicht von anderen aufgerufen, natürlich können wir sie ändern. An diesem Punkt können wir diese wiederholten Codes durch Adapter reduzieren.
6. OO-Designprinzipien
• Schnittstellenorientierte Programmierung (abstraktionsorientierte Programmierung)
• Kapselungsänderungen • Mehr Kombination und weniger Vererbung verwenden
•Geschlossen gegenüber Modifikationen und offen für Erweiterungen
Persönlich erfordern diese Designprinzipien ein tieferes Verständnis in der Praxis, daher werde ich sie hier nicht zu ausführlich beschreiben~
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Studium aller hilfreich ist. Ich hoffe auch, dass jeder die chinesische PHP-Website unterstützt.
Weitere Artikel zum Java-Designmuster-Adaptermuster finden Sie auf der chinesischen PHP-Website!