委派模式(Delegate Patter)行为模式,代理模式注重过程,而委派模式注重结果。
在spring中的体现:Spring MVC框架中的DispatcherServlet其实就用到了委派模式。
委派模式的作用: 基本作用就是负责任务的调用和分配任务,跟代理模式很像,可以看做是一种特殊情况下的静态代理的全权代理,但是代理模式注重过程,而委派模式注重结果
日常中委派模式例子: boss把任务给leader,而leader做了一个任务的分配和调度的工作,自己没有做工作,而是把具体工作交给具体的执行者去做。
spring 中以delegate 或dispatcher 结尾或包含都是委派模式,
eg:
1、com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet
2、org.springframework.beans.factory.xml.BeanDefinitionParserDelegate
public class DispatcherServlet extends HttpServlet {
private static final long serialVersionUID = 5766349180380479888L;
private static DispatcherServlet INSTANCE;
private static final Map<Integer, HttpHandler> handlers = new ConcurrentHashMap();
public static void addHttpHandler(int port, HttpHandler processor) {
handlers.put(port, processor);
}
public static void removeHttpHandler(int port) {
handlers.remove(port);
}
public static DispatcherServlet getInstance() {
return INSTANCE;
}
public DispatcherServlet() {
INSTANCE = this;
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpHandler handler = (HttpHandler)handlers.get(request.getLocalPort());
if (handler == null) {
response.sendError(404, "Service not found.");
} else {
handler.handle(request, response);
}
}
}