面向對象開閉原則要求對修改關閉,對擴展開放。有良好擴展性,抽象很重要。常用的抽象方式:abstract類和interfaces。Spring的HandlerAdapter能適配到真正幹活的Handler(controller),HandlerAdapter以interfaces類型和Object參數,使得Spring擴展和兼容性良好。
spring的DispatchServlet核心代碼
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
接口註釋
HandlerAdapter 接口使得DispatchServlet有良好擴展性,只需getHandlerAdapter返回對於的實現類即可,有新的HandlerAdapter只需實現接口即可,原有的實現類不用改動,實現類可以無限擴展。
HandlerAdapter 核心方法
public interface HandlerAdapter {
ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
}
接口註釋
第三個參數Object handler可看出處理程序是Object類型,而不是某類限定interface類型,使得可以啓用來自其他框架的處理程序,集成其他表現層框架。