Modo adaptador del modelo de diseño (incluido el ejemplo completo UML)

Establecer el modelo de adaptador del modelo de diseño

1. Modo adaptador

1.1 Definición y características

  La definición del patrón de adaptador (Adaptador) es la siguiente: use una clase existente y su interfaz no satisfaga nuestras necesidades. En este momento, de acuerdo con el principio de apertura y cierre, debemos crear una clase que satisfaga nuestras necesidades (agregando funciones de interfaz independientes o incompatibles) e implementa las interfaces existentes. El patrón del adaptador se divide en dos tipos: un modo de estructura de clase y un modo de estructura de objeto. El primero tiene un mayor grado de acoplamiento que el segundo, y requiere que los programadores comprendan la estructura interna de los componentes relacionados en la biblioteca de componentes existente, por lo que hay relativamente pocas aplicaciones. Algunos.

  Las principales ventajas de este modelo son las siguientes:

  • El cliente puede llamar de forma transparente a la interfaz de destino a través del adaptador.
  • Las clases existentes se reutilizan, y los programadores no necesitan modificar el código original para reutilizar las clases de adaptador existentes.
  • Desacoplar la clase de destino y la clase de adaptador resuelve el problema de las interfaces inconsistentes entre la clase de destino y la clase de adaptador.

  La desventaja es que para el adaptador de clase, el proceso de implementación para reemplazar el adaptador es más complicado.

1.2 Estructura del modelo.

  El modo de adaptador (Adaptador) contiene los siguientes roles principales.

  • Interfaz de destino (Target): la interfaz esperada por el negocio actual del sistema, puede ser una clase o interfaz abstracta.
  • Clase Adaptee (Adaptee): es la interfaz de componente en la biblioteca de componentes existente a la que se accede y se adapta.
  • Clase de adaptador (adaptador): es un convertidor que convierte la interfaz del adaptador en la interfaz de destino heredando o haciendo referencia al objeto del adaptador, lo que permite a los clientes acceder al adaptador de acuerdo con el formato de la interfaz de destino.

1.3 diagrama UML

Inserte la descripción de la imagen aquí

Figura una clase de diagrama de clase UML de adaptador

Inserte la descripción de la imagen aquí

Figura 2 Diagrama de clase UML del adaptador de objeto

1.4 Origen del problema

  En la vida real, a menudo hay casos en los que dos objetos no pueden funcionar juntos debido a interfaces incompatibles, en este caso, un tercero necesita adaptarse. Por ejemplo, una computadora portátil que usa alimentación de CC necesita un adaptador de CA cuando está conectada a la alimentación de CA y un lector de tarjetas que debe usarse para acceder a la tarjeta de memoria SD de la cámara usando una computadora.

  También puede aparecer en el diseño de software: los componentes con ciertas funciones comerciales que deben desarrollarse ya existen en la biblioteca de componentes existente, pero no son compatibles con las especificaciones actuales de la interfaz del sistema. Si el costo de volver a desarrollar estos componentes es muy alto, esto El modo adaptador puede resolver bien estos problemas

1.5 Solución

  Hay dos formas de resolverlo: la primera es el patrón de adaptador de clase. La idea principal es implementar la adaptación por herencia, es decir, heredar la nueva clase de función empresarial sobre la base de los componentes originales. La segunda es el patrón de adaptador de objeto. La idea principal es Los objetos de la nueva clase de función empresarial se inyectan en los componentes originales y luego alcanzan el papel de adaptación.

1.6 Solución

  1. Modo de adaptador de clase

/**
 * @author 26530
 *      HDMI接口
 */
public interface HDMIPort 
{
	void useHDMIPort();
}

/**
 * @author 26530
 *  数据转换线
 */
public class DataConversionLine 
{
      public void vgaToHdmi()
      {
    	  System.out.println("将VGA数据传输转为HDMI");
      }
}

/**
 * @author 26530
 *     笔记本电脑
 */
public class LaptopComputer extends DataConversionLine implements HDMIPort
{

	@Override
	public void useHDMIPort() 
	{
		System.out.println("使用的HDMI接口");		
	}
	
}

/**
 * @author 26530
 * 投影仪
 */
public class Projector 
{

	public void dataLine() 
	{
		 System.out.println("投影仪使用的是VGA接口的数据线");
	}
}

public class Test 
{
      public static void main(String[] args) 
      {
		  //笔记本想连接投影仪,但是笔记本自身的接口是HDMI,投影仪的接口是VGA的。
    	  //为解决这个问题,我们需要一个适配器,把vga的接口转为hdmi,通过这个适配器就可以实现笔记本电脑和投影仪连接了
    	  Projector projector = new Projector();
    	  projector.dataLine();
    	  LaptopComputer laptopComputer = new LaptopComputer();
    	  laptopComputer.vgaToHdmi();
    	  laptopComputer.useHDMIPort();
    	  /*
    	                投影仪使用的是VGA接口的数据线
			    将VGA数据传输转为HDMI
			    使用的HDMI接口
    	   */
    	  //这样就实现了笔记本和投影仪相连接
	  }
}

  2. Patrón adaptador de objeto

/**
 * @author 26530
 * HDMI接口
 */
public interface HDMIPort 
{
	void useHDMIPort();
}


/**
 * @author 26530
 *  数据转换线
 */
public class DataConversionLine 
{
      public void vgaToHdmi()
      {
    	  System.out.println("将VGA数据传输转为HDMI");
      }
}
/**
 * @author 26530
 *     笔记本电脑
 */
public class LaptopComputer  implements HDMIPort
{
	
	private DataConversionLine dataConversionLine;

	public LaptopComputer(DataConversionLine dataConversionLine) {
		super();
		this.dataConversionLine = dataConversionLine;
	}

	public LaptopComputer() {
		super();
		// TODO Auto-generated constructor stub
	}

	@Override
	public void useHDMIPort() 
	{
		System.out.println("使用的HDMI接口");		
	}

	public DataConversionLine getDataConversionLine() {
		return dataConversionLine;
	}

	public void setDataConversionLine(DataConversionLine dataConversionLine) {
		this.dataConversionLine = dataConversionLine;
	}
	
	
	
}
/**
 * @author 26530
 * 投影仪
 */
public class Projector 
{

	public void dataLine() 
	{
		 System.out.println("投影仪使用的是VGA接口的数据线");
	}
}
public class Test 
{
      public static void main(String[] args) 
      {
		  //笔记本想连接投影仪,但是笔记本自身的接口是HDMI,投影仪的接口是VGA的。
    	  //为解决这个问题,我们需要一个适配器,把vga的接口转为hdmi,通过这个适配器就可以实现笔记本电脑和投影仪连接了
    	  Projector projector = new Projector();
    	  projector.dataLine();
    	  DataConversionLine dataConversionLine = new DataConversionLine();
    	  LaptopComputer laptopComputer = new LaptopComputer(dataConversionLine);
    	  laptopComputer.getDataConversionLine().vgaToHdmi();
    	  laptopComputer.useHDMIPort();
    	  /*
    	                投影仪使用的是VGA接口的数据线
			    将VGA数据传输转为HDMI
			    使用的HDMI接口
    	   */
    	  //这样就实现了笔记本和投影仪相连接
	  }
}

56 artículos originales publicados · Me gusta1 · Visitas1168

Supongo que te gusta

Origin blog.csdn.net/atu1111/article/details/105458658
Recomendado
Clasificación