preámbulo
SpringMVC Introducción, Introducción
SpringMVC comentario común determinación
Directorio artículo
modo de adaptador
introducción básica
- Un patrón adaptador se convierte en una interfaz, la interfaz de cliente representa otro desea, el objetivo principal es la compatibilidad, de modo que el trabajo original juntos dos clases no pueden trabajar juntos porque las interfaces no coinciden, un alias para el envasado ( envoltorio)
- adapter pertenece modelo estructural
- Divididos en tres categorías: Tipo modo adaptador, el modo de adaptador de objeto, el modo de adaptador de interfaz
funciona el modo de adaptador
- Adaptador modo: Convierte la interfaz de una clase en otra interfaz para que la interfaz original no es compatible clase compatibles
- Desde el punto de vista del usuario no puede ser adaptado que está desacoplado
- El usuario invoca el adaptador de conversión de método de interfaz de destino, a continuación, llamar interfaz correspondiente del adaptador adaptado
- El usuario recibe resultados de retroalimentación, y la sensación de que es la interacción de la interfaz de destino
aplicación adapter Clase
package com.java.springtest.classadapter;
// 被适配的类
public class Voltage {
// 输出 220V 的电压
public int outPut220V() {
int src = 220;
System.out.println("电压=" + src + "V");
return src;
}
}
package com.java.springtest.classadapter;
/**
* @author Woo_home
* @create by 2020/2/17
*/
// 适配接口
public interface IVoltage {
int outPut();
}
package com.java.springtest.classadapter;
public class VoltageAdapter extends Voltage implements IVoltage {
@Override
public int outPut() {
// 获取到 220V 电压
int srcV = outPut220V();
int dstV = srcV / 44;
return dstV;
}
}
package com.java.springtest.classadapter;
public class Phone {
// 充电
public void changing(IVoltage iVoltage) {
if (iVoltage.outPut() == 5) {
System.out.println("电压为 5V,可以充电");
} else if (iVoltage.outPut() > 5) {
System.out.println("电压大于 5V,不能充电");
}
}
}
package com.java.springtest.classadapter;
public class Client {
public static void main(String[] args) {
System.out.println("----------- 类适配器模式 ------------");
Phone phone = new Phone();
phone.changing(new VoltageAdapter());
}
}
salida:
Notas y detalles de una clase adapter
- Java es un único mecanismo de herencia, por lo que las clases tienen que hereda la clase adaptador src que puede ser considerado un inconveniente, ya que requiere el horario de verano debe ser una interfaz, hay algunas limitaciones
- El método de src en la clase adaptador estará expuesto, sino que también aumenta el coste de la utilización de
- Debido a su clase src heredado, por lo que puede ser de clase métodos reemplazados src acuerdo con la demanda, por lo que mejora la flexibilidad del adaptador
Objeto adaptador implementación de patrones
package com.java.springtest.classadapter;
// 被适配的类
public class Voltage {
// 输出 220V 的电压
public int outPut220V() {
int src = 220;
System.out.println("电压=" + src + "V");
return src;
}
}
package com.java.springtest.classadapter;
// 适配接口
public interface IVoltage {
int outPut();
}
package com.java.springtest.classadapter;
public class VoltageAdapter implements IVoltage {
private Voltage voltage;
public VoltageAdapter(Voltage voltage) {
this.voltage = voltage;
}
@Override
public int outPut() {
int dst = 0;
if (null != voltage) {
int src = voltage.outPut220V();// 获取 220V 电压
dst = src / 44;
}
return dst;
}
}
package com.java.springtest.classadapter;
public class Phone {
// 充电
public void changing(IVoltage iVoltage) {
if (iVoltage.outPut() == 5) {
System.out.println("电压为 5V,可以充电");
} else if (iVoltage.outPut() > 5) {
System.out.println("电压大于 5V,不能充电");
}
}
}
package com.java.springtest.classadapter;
public class Client {
public static void main(String[] args) {
System.out.println("----------- 对象适配器模式 ------------");
Phone phone = new Phone();
phone.changing(new VoltageAdapter(new Voltage()));
}
}
Notas y detalles del objeto del adapter
- Objeto adaptador y el adaptador de clase, de hecho, ser la misma idea, pero con diferentes implementaciones, sintetizado de acuerdo con el principio de la multiplexación, utilizando una combinación de herencia alternativa, por lo que resuelve las limitaciones de adaptador de la clase src debe heredar y el horario de verano debe ser más largo sin necesidad de interfaz
- El uso de un costo más bajo, más flexible
el modo de adaptador de interfaz
introducción básica
- Algunos libros conocidos como: modo de adaptador o adaptador de modo predeterminado
- Cuando no hay interfaz proporciona todos los métodos implementados, diseñado para ser un implementos clase abstracta de una interfaz, y aplicar un (null Método) El método por defecto para cada interfaz, la subclase abstracta de esta clase puede ser selectivamente anular el padre algunos métodos para lograr los requisitos de la categoría
- Aplicable al caso no quieren usar todos sus métodos de una interfaz
Solicitud de Modelo de adaptador y el análisis de marco fuente SpringMVC
- SpringMVC en HandlerAdapter es el uso de un modo de adaptador
- El flujo de trabajo de procesamiento de solicitudes SpringMVC
- La razón de usar el análisis HandlerAdapter: Usted puede ver los diferentes tipos de procesadores, hay varias maneras de lograr, a continuación, llamar el camino es incierto, si es necesario llamar al método controlador directamente, usted tiene que llamar constantemente cuando se necesita usar si otra persona para determinar qué a continuación, ejecutar una clase de semilla. Así que si este último se extienden controlador, es necesario modificar el código subyacente, por tanto, contraria al principio de OCP
Sobre SpringMVC y el uso de lo anterior, no puede mirar
El código siguiente es doDispatch DispatchServlet en el método (), mediante la asignación de Controller HandlerMapping
después de adquirir la definición del controlador para el controlador, el código siguiente es mappedHandler.getHandler (), getHandlerAdapter () devuelve el método un adaptador. ¿Por qué quiere devolver un adaptador? Debido a diverso adaptador para utilizar un manejador distinto para llamar al método apropiado para ser procesado
a continuación, nos fijamos en el getHandlerAdapter () Este método es la forma en funcionamiento
puede ser visto desde el getHandlerAdapter código () devuelve un HandlerAdapter, buscamos bajo HandlerAdapter es algo
que nos fijamos en lo que implementa esta interfaz clase
entonces siguen buscando getHandlerAdapter () método es la forma en la devolución de un HandlerAdapter
private List<HandlerAdapter> handlerAdapters;
protected HandlerAdapter getHandlerAdapter(Object handler) throws ServletException {
// 判断 handlerAdapters 是否为空
if (this.handlerAdapters != null) {
// 如果不为空,则遍历 handlerAdapters
Iterator var2 = this.handlerAdapters.iterator();
while(var2.hasNext()) {
HandlerAdapter adapter = (HandlerAdapter)var2.next();
// 大家看过上面 HandlerAdapter 的源码之后会发现在 HandlerAdapter 有一个方法
// 是 supports,而这里的方法就是 HandlerAdapter 中的
// 这里是判断适配器处理器支不支持这个处理器
if (adapter.supports(handler)) {
// 如果支持则返回这个适配器处理器
return adapter;
}
}
}
throw new ServletException("No adapter for handler [" + handler + "]: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler");
}
Y esto es en realidad manejar nuestro llamado controlador, controlador llamando al método de adaptador y devolver un (HandlerAdapter mango se define en el método de interfaz ()) ModelAndView, es decir, el código anterior mv
resumen
aplicación HandlerAdapter subclases controlador de modo que cada adaptador hay su correspondiente clases de implementación, cada uno con un diferentes implementaciones de controladores
SpringMVC se consigue lograr a través del adaptador a los correspondientes patrones de diseño de código fuente del controlador
Descripción:
- Primavera define una interfaz de adaptador, de manera que el adaptador tiene una clase que implementa cada uno a un controlador correspondiente
- Alternativamente se realiza Controller método respectivo adaptador
- Cuando la expansión del controlador, sólo tendrá que añadir una clase adaptador para completar la expansión de la SpringMVC
código de código se ha subido a la nube, la próxima amigo en necesidad puede ver, usted mismo lograr SpringMVC