Spring MVC 必备设计模式 适配器模式

使得原本由于接⼝不兼容⽽不能⼀起⼯作、不能统⼀管理的那些类可以⼀起⼯作、可以进⾏统⼀管理

解决接⼝不兼容⽽不能⼀起⼯作问题,看下⾯⼀个⾮常经典的案例
在中国,⺠⽤电都是220v交流电,但是⼿机锂电池⽤的都是5v直流电。因此,我们给⼿机充电时
就需要使⽤电源适配器来进⾏转换。使⽤代码还原这个⽣活场景
创建AC220类,表示220v交流电

package com.lwl.edu;
import com.sun.org.apache.bcel.internal.generic.RETURN;
public class AC220 {
 public int outputAC220V() {
 int output = 220;
 System.out.println("输出交流电" + output + "V");
 return output;
 }
}

创建DC5接⼝,表示5V直流电:

package com.lwl.edu;
public interface DC5 {
 int outputDC5V();
}

创建电源适配器类 PowerAdapter

package com.lwl.edu;
public class PowerAdapter implements DC5 {
 private AC220 ac220;
 public PowerAdapter(AC220 ac220) {
 this.ac220 = ac220;
 }
 public int outputDC5V() {
 int adapterInput = ac220.outputAC220V();
 // 变压器...
 int adapterOutput = adapterInput/44;
 System.out.println("使⽤ PowerAdapter 输⼊AC:" + adapterInput + "V
输出DC:" + adapterOutput + "V");
 return adapterOutput;
 }
}

客户端测试代码

package com.lwl.edu;
public class AdapterTest {
 public static void main(String[] args) {
 DC5 dc5 = new PowerAdapter(new AC220());
 dc5.outputDC5V();
 }
}

在上⾯的案例中,通过增加电源适配器类PowerAdapter实现了⼆者的兼容

解决不能统⼀管理的问题

SpringMVC中处理器适配器(HandlerAdapter)机制就是解决类统⼀管理问题⾮常经典的场景
其中 HandlerAdapter接⼝是处理器适配器的顶级接⼝,它有多个⼦类,包括
AbstractHandlerMethodAdapter、SimpleServletHandlerAdapter、
SimpleControllerHandlerAdapter、HttpRequestHandlerAdapter、
RequestMappingHandlerAdapter
其适配器调⽤的关键代码也在DispatcherServlet的doDispatch()⽅法中
Spring MVC 必备设计模式 适配器模式_第1张图片
在 doDispatch() ⽅法中调⽤了 getHandlerAdapter() ⽅法

	protected HandlerAdapter getHandlerAdapter(Object handler) throws ServletException {
		if (this.handlerAdapters != null) {
			for (HandlerAdapter adapter : this.handlerAdapters) {
				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");
	}

在 getHandlerAdapter() ⽅法中循环调⽤了 supports() ⽅法判断是否兼容,循环迭代集合中的
“Adapter” 在初始化时已经赋值。

你可能感兴趣的:(Spring,MVC,设计模式,java,编程语言)