Wir stoßen oft auf diese Situation. Mit zwei vorbereiteten Klassen gibt es keine Verbindung zwischen ihnen, aber jetzt möchten wir eine der Methoden der Klasse und der anderen verwenden. Es gibt eine Problemumgehung, um ihre jeweiligen Schnittstellen zu ändern, aber das möchten wir am wenigsten sehen. Zu diesem Zeitpunkt ist der Adaptermodus nützlich.
Der Adaptermodus wird auch als Adaptermodus bezeichnet, was einer von 23 von GOF vorgeschlagenen Entwurfsmodi ist. Der Adaptermodus ist einer der konstruktiven Modi. Im Adaptermodus kann die Schnittstellenform vorhandener Klassen (oder externer Klassen) geändert werden.
Es gibt drei Möglichkeiten zum Adaptermodus, eines ist Objektadapter, einer ist Klassenadapter und der andere ist Schnittstellenadapter
Die folgenden Beispiele sind angegeben:
1. Klassenadapter
Klassendiagramm
öffentliche Klasse DrawRectangle {// Square public void drawRectangle (String msg) {System.out.println ("Rechteck zeichnen:" + msg); }} public interface idrawcircle {// Circle Interface void Drawcircle (); } / ** * Der Klassenadapter verwendet die Objekterbranz, eine statische Definitionsmethode * @Author Stone * */ öffentliche Klasse DrawAdapter4 -Klasse erweitert Drawrectangle implementiert idrawcircle {// Can Square und Circle @Override public void drawcircle () {system.out.println ("Drawadapter4classe: Drawcccle"). }}2. Objektadapter
Klassendiagramm:
/*** Objektadapter: Die Art und Weise, wie die Objektkombination verwendet wird, ist eine Möglichkeit, sich dynamisch zu verbinden. * Kann Quadrat und Kreise zeichnen Der Adapter passt sich an den Adapter und den Adapter (Drawcircle) * */ öffentliche Klasse DrawAdapter4Object implementiert Idrawcircle {// kann quadratische und kreise private drawrectangle drawrectangle zeichnen; public Drawadapter4Object (DrawRectangle DrawRectangle) {this.drawrectangle = DrawRectangle; } @Override public void drawcircle () {System.out.println ("Drawadapter4Object: DrawCircle"); } public void DrawRectangle (String msg) {DrawRectangle.DrawRectangle (msg); }} 3. Schnittstellenadapter
Klassendiagramm
/ * * Schnittstellenadapter: In der Schnittstelle gibt es abstrakte Methoden. Wir möchten nur einige von ihnen implementieren, aber wir möchten sie nicht alle implementieren. * Geben Sie also eine Standard -leere Implementierung an und erben Sie dann die Methode, die wir implementieren möchten */ öffentliche Schnittstelle IDRAW {void Drawcircle (); void DrawRectangle (); } /** Standardimplementierung des Schnittstellenadapters*/Public Class DefaultDrawadapter implementiert Idraw {// Implementierung von Square und Circles @Override public void Drawcircle () {} @Override öffentliche void drawectangle () {}} public class test {public static void main (String [] args) {// Objektadapter Drawadapter4Object Objadapter = new Drawadapter4Object (New DrawRectangle ()); objadapter.drawcircle (); objadapter.drawrectangle ("in Drazidapter4Object"); System.out.println ("-------------------"); // Class Adapter Drawadapter4Class Clzadapter = New Drawadapter4Class (); clzadapter.drawcircle (); clzadapter.drawrectangle ("in Dravadapter4Class"); System.out.println ("---------------------"); // Schnittstellenadapter mydrawadapter mydrawadapter = new mydrawadapter (); mydrawadapter.drawcircle (); mydrawadapter.drawrectangle (); } statische Klasse MyDrawadapter erweitert defaultDrawadapter {@Override public void Drawcircle () {System.out.println ("Drawcircle in mydrawadapter"); }}}Drawadapter4Object: Drawcircle-Zeichnung Rechteck: In Drawadapter4Object -------------- DrawAdapter4-Class: Drawcircle Draw Rechteck: In Drawadapter4Class -------------- Drawcircle in MyDrawadapter
Drei Merkmale des Adaptermodus:
1 Das Adapterobjekt implementiert die ursprüngliche Schnittstelle
2 Das Adapterobjekt kombiniert ein Objekt, das eine neue Schnittstelle implementiert (dieses Objekt kann auch keine Schnittstelle implementieren, sondern nur ein einfaches Objekt).
3.. Eine spezifische Methode, bei der der Aufruf zur ursprünglichen Schnittstellenmethode des Adapters an eine Instanz der neuen Schnittstelle delegiert wird
Einige Leute denken, dass die Beispiele, die das Designmuster erklären, zu einfach sind, und es scheint so, aber wenn Sie es wirklich in der Projektentwicklung verwenden möchten, wird es es wirklich nicht anwenden können. Tatsächlich müssen wir in unseren Projekten keine absichtlich Designmuster verwenden, sondern von den tatsächlichen Designproblemen beginnen und verwenden, welches Modell unsere Probleme lösen kann. Verwenden Sie das Muster nicht, um das Muster zu verwenden, und überspringen Sie einfach den Boden. Im Allgemeinen wird das Entwurfsmuster, solange Sie bestimmten Designprinzipien folgen, auch auf der Grundlage dieser Prinzipien zusammengefasst. Wenn Sie mit diesen Prinzipien vertraut sind, existiert das Muster natürlich.