Nous rencontrons souvent cette situation. Avec deux classes prêtes à l'emploi, il n'y a pas de lien entre eux, mais maintenant nous voulons utiliser l'une des méthodes de la classe et l'autre. Il y a une solution de contournement pour modifier leurs interfaces respectives, mais c'est ce que nous voulons le moins voir. À l'heure actuelle, le mode adaptateur sera utile.
Le mode adaptateur est également appelé mode adaptateur, qui est l'un des 23 modes de conception proposés par GOF. Le mode adaptateur est l'un des modes constructifs. Grâce au mode adaptateur, la forme d'interface des classes existantes (ou classes externes) peut être modifiée.
Il existe trois façons d'adapter le mode, l'un est l'adaptateur d'objet, l'un est l'adaptateur de classe et l'autre adaptateur d'interface
Les exemples suivants sont donnés:
1. Adaptateur de classe
Diagramme de classe
classe publique DrawRectangle {// dessiner Square public void drawrectangle (String msg) {System.out.println ("Draw Rectangle:" + msg); }} Interface publique idrawcircle {// Draw Circle Interface void DrawCircle (); } / ** * L'adaptateur de classe utilise l'héritage des objets, qui est une méthode de définition statique * @Author Stone * * / public class DrawAdapter4Class étend Drawrectangle implémente idrawcircle {// peut dessiner carré et cercle @Override public void DrawCircle () {System.out.println ("drawAdapter4Class: DrawCircle"); }}2. Adaptateur d'objet
Diagramme de classe:
/ ** * Adaptateur d'objet: la façon d'utiliser la combinaison d'objets est un moyen de combiner dynamiquement. * Peut dessiner carré et cercles * @author pierre * DrawAdapter est un adaptateur, Drawrectangle appartient à l'adaptateur et est l'adaptateur. L'adaptateur s'adaptera à l'adaptateur et à l'adaptateur (DrawCircle) * * / classe publique DrawAdapter4Object implémente idrawcircle {// peut dessiner carré et cercles private drawrectangle drawrectangle; 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. Adaptateur d'interface
Diagramme de classe
/ * * Adaptateur d'interface: il existe des méthodes abstraites dans l'interface. Nous voulons uniquement implémenter quelques-uns, mais nous ne voulons pas les implémenter tous. * Donc, fournissez une implémentation vide par défaut, puis en hériter, et réécrivez la méthode que nous voulons implémenter * / interface publique idraw {void DrawCircle (); void drawrectangle (); } / * * Implémentation par défaut de l'adaptateur d'interface * / classe publique DefaultDrawAdapter implémente iDRAW {// implémentation de Square et Circles @Override public void DrawCircle () {} @Override public void drawrectangle () {}} classe publique test {public static void main (String [] args) {// adaptateur d'objet DrawAdapter4Object objAdapter = new DrawAdapter4Object (new Drawrectangle ()); objAdapter.DrawCircle (); objadapter.Drawrectangle ("dans drawAdapter4Object"); System.out.println ("-------------------"); // adaptateur de classe DrawAdapter4Class clzadapter = new DrawAdapter4Class (); clzadapter.DrawCircle (); clzadapter.Drawrectangle ("dans drawAdapter4Class"); System.out.println ("---------------------"); // adaptateur d'interface myDrawadapter mydrawadapter = new mydrawadapter (); myDrawadapter.DrawCircle (); myDrawadapter.Drawrectangle (); } classe statique MyDrawadapter étend defaultDrawAdapter {@Override public void drawCircle () {System.out.println ("DrawCircle dans myDrawadapter"); }}}Imprimer
DrawAdapter4Object: DrawCircle Draw Rectangle: Dans DrawAdapter4Object -------------- DrawAdapter4Class: DrawCircle Draw RECTANG
Trois fonctionnalités du mode adaptateur:
1 L'objet adaptateur implémente l'interface d'origine
2 L'objet adaptateur combine un objet qui implémente une nouvelle interface (cet objet ne peut pas non plus implémenter une interface, c'est juste un objet simple)
3. Une méthode spécifique dans laquelle l'appel à la méthode d'interface d'origine de l'adaptateur est délégué à une instance de la nouvelle interface
Certaines personnes pensent que les exemples expliquant le modèle de conception sont trop simples, et cela semble ainsi, mais si vous voulez vraiment l'utiliser dans le développement de projets, il ne pourra vraiment pas l'appliquer. En fait, nous n'avons pas à utiliser délibérément des modèles de conception dans nos projets, mais nous devons commencer les problèmes de conception réels et utiliser quel modèle peut résoudre nos problèmes. N'utilisez pas le motif pour utiliser le motif, puis sautez simplement le sol. D'une manière générale, tant que vous suivez certains principes de conception, le modèle de conception est également résumé en fonction de ces principes. Si vous connaissez ces principes, le modèle existera naturellement.