Adaptador de modo, así como en la aplicación de SpringMVC

preámbulo

SpringMVC Introducción, Introducción

SpringMVC (parámetros avanzados, el tipo de lista de unión, @ RequestMapping, la definición de un método de petición, y el método devuelve un valor Controller)

SpringMVC comentario común determinación

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:
Aquí Insertar imagen Descripción

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()));
    }
}

Aquí Insertar imagen Descripción

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
Aquí Insertar imagen Descripción
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
Aquí Insertar imagen Descripción
a continuación, nos fijamos en el getHandlerAdapter () Este método es la forma en funcionamiento
Aquí Insertar imagen Descripción
puede ser visto desde el getHandlerAdapter código () devuelve un HandlerAdapter, buscamos bajo HandlerAdapter es algo
Aquí Insertar imagen Descripción
que nos fijamos en lo que implementa esta interfaz clase
Aquí Insertar imagen Descripción
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");
}

Aquí Insertar imagen Descripción
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
Aquí Insertar imagen Descripción

Ha publicado 196 artículos originales · ganado elogios 961 · vistas 190 000 +

Supongo que te gusta

Origin blog.csdn.net/Woo_home/article/details/104363388
Recomendado
Clasificación