A menudo nos encontramos con esta situación. Con dos clases preparadas, no hay conexión entre ellas, pero ahora queremos usar uno de los métodos de la clase y el otro. Hay una solución para modificar sus respectivas interfaces, pero esto es lo que menos queremos ver. En este momento, el modo adaptador será útil.
El modo adaptador también se llama modo adaptador, que es uno de los 23 modos de diseño propuestos por GOF. El modo adaptador es uno de los modos constructivos. A través del modo adaptador, se puede cambiar la forma de interfaz de las clases existentes (o clases externas).
Hay tres formas de adaptador, uno es adaptador de objeto, uno es adaptador de clase y el otro es adaptador de interfaz
Se dan los siguientes ejemplos:
1. Adaptador de clase
Diagrama de clases
public class DrawRectangle {// Dibuja Square public void dibujante (string msg) {system.out.println ("dibujar rectangle:" + msg); }} interfaz pública idrawcircle {// dibujar interfaz círculo void drawcircle (); } / ** * El adaptador de clase utiliza la herencia de objetos, que es un método de definición estática * @author Stone * */ public class DrawAdapter4Class extiende el dibujo de dibujo implementa Idrawcircle {// puede dibujar cuadrado y círculo @Override public void drawcircle () {System.out.Println ("DrawAdapter4class: DrawCircle"); }}2. Adaptador de objeto
Diagrama de clases:
/*** Adaptador de objeto: la forma de usar la combinación de objetos es una forma de combinar dinámicamente. * Puede dibujar cuadrado y círculos * @author Stone * DrawAdapter es un adaptador, el dibujo pertenece al adaptador y es el adaptador. El adaptador se adaptará al adaptador y al adaptador (DrawCircle) * */ public class DrawAdapter4Object implementa IdrawCircle {// puede dibujar cuadrado y círculos de círculos DrawRectangle DrawRectangle; public DrawAdapter4Object (dibujo de dibujo drawRectangle) {this.drawrectangle = dibujante; } @Override public void DrawCircle () {System.out.println ("DrawAdapter4Object: DrawCircle"); } public void drawRectangle (string msg) {drawRectangle.DrawRectangle (msg); }} 3. Adaptador de interfaz
Diagrama de clases
/ * * Adaptador de interfaz: existen métodos abstractos en la interfaz. Solo queremos implementar algunos de ellos, pero no queremos implementarlos todos. * Por lo tanto, proporcione una implementación vacía predeterminada y luego herede de ella, y reescribe el método que queremos implementar */ Public Interface Idraw {void drawcircle (); nulo dibujante (); } /** Implementación predeterminada del adaptador de interfaz*/public class DefaultDrawAdapter implementa Idraw {// Implementación de cuadrados y círculos @Override public void drawcircle () {} @Override public void drawRectangle () {}} Prueba de clase pública {public static void main (string [] args) {// Object Adapter DrawAdapter4Object objadapter = new DrawAdapter4Object (new DrawRectangle ()); objadapter.DrawCircle (); objadapter.drawrectangle ("en DrawAdapter4Object"); System.out.println ("-------------------"); // Class Adapter DrawAdapter4Class Clzadapter = new DrawAdapter4Class (); Clzadapter.DrawCircle (); clzadapter.drawrectangle ("en DrawAdapter4Class"); System.out.println ("---------------------"); // Adaptador de interfaz myDrawAdapter myDrawAdapter = new MyDrawAdapter (); myDrawAdapter.DrawCircle (); myDrawAdapter.DrawRectangle (); } La clase estática myDrawAdapter extiende defaultDrawAdapter {@Override public void drawcircle () {System.out.println ("DrawCircle en MyDrawAdapter"); }}}Imprimir
DrawAdapter4Object: DrawCircle Draw Rectangle: In DrawAdapter4Object -------------- DrawAdapter4Class: DrawCircle Draw Rectangle: En DrawAdapter4Class -------------- Circle en MyDrawAdapter
Tres características del modo adaptador:
1 El objeto adaptador implementa la interfaz original
2 El objeto adaptador combina un objeto que implementa una nueva interfaz (este objeto tampoco puede implementar una interfaz, es solo un objeto simple)
3. Un método específico en el que la llamada al método de interfaz original del adaptador se delega a una instancia de la nueva interfaz
Algunas personas piensan que los ejemplos que explican el patrón de diseño son demasiado simples, y parece así, pero si realmente quiere usarlo en el desarrollo del proyecto, realmente no podrá aplicarlo. De hecho, no tenemos que usar deliberadamente patrones de diseño en nuestros proyectos, pero deberíamos comenzar con los problemas de diseño reales y usar qué modelo puede resolver nuestros problemas. No use el patrón en aras de usar el patrón, luego simplemente omita el resultado final. En términos generales, siempre que siga ciertos principios de diseño, el patrón de diseño también se resume en función de estos principios. Si está familiarizado con estos principios, el patrón existirá naturalmente.