A função básica do modelo de delegação é ser responsável pela invocação e atribuição de tarefas, semelhante ao modelo de agência, mas o modelo de agência se concentra no processo, enquanto o modelo de delegação se concentra nos resultados. O modelo de delegação é amplamente usado na primavera e também existem muitos cenários na vida real. Por exemplo, quando o chefe atribui tarefas ao gerente de projeto, o gerente de projeto atribui as tarefas aos funcionários correspondentes.
Criar interface de funcionário
interface pública IEmployee { public void doing (String commond); }
Criar classe de funcionário, funcionário A
public class IEmployeeA implementa IEmployee { @Override public void doing (String commond) { System.out.println ("aaaaaaaaaaaaaaaaa"); } }
Criar classe de funcionário, funcionário B
public class IEmployeeB implementa IEmployee { @Override public void doing (String commond) { System.out.println ("bbbbbbbbbbbbbbbbbb"); } }
Criar classe de gerente de projeto
classe pública Leader implementa IEmployee { private Map <String, IEmployee> targets = new HashMap <String, IEmployee> (); public Leader () { targets.put ("前端", novo IEmployeeA ()); targets.put ("后端", novo IEmployeeB ()); } @Override public void doing (String commond) { targets.get (commond) .doing (commond); } }
Criar classe Boss
public class Boss { public void command (comando String, Leader leader) { leader.doing (command); } }
Criar classe de teste
public class DemoUtil { public static void main (String [] args) lança Exceção { new Boss (). command ("后端", new Leader ()); } }
Resultado dos testes:
bbbbbbbbbbbbbbbbbbb
A partir dos resultados acima, pode-se perceber que, como o gerente de projeto atribuiu a tarefa aos funcionários de retaguarda, foi o funcionário B quem fez o trabalho arranjado pelo chefe.
DispatcherServlet na primavera é o modo de delegação usado, e o modo de delegação é implementado no final de Delegate.
Então, como dispatcherServlet implementa o modo de delegação no Spring MVC?
Criar classe executiva
public class ItemController { public void getItemById () {}; }
classe pública OrderController { public void getOrderById () {}; }
Criar classe DispatcherServlet
public class DispatcherServlet extends HttpServlet { private void doDispatch (HttpServletRequest request, HttpServletResponse response) { String uri = request.getRequestURI (); String id = request.getParameter ("mid"); if ("getItemById"). equals (uri) { new ItemController (). getItemById (id); } else if ("getOrderById" .equals (uri)) { new OrderController (). getOrderById (id); } else { response.getWriter (). write ("404 não encontrado"); } } serviço void protegido (HttpServletRequest req, HttpServletResponse resp) { try { doDispatch (req, resp); } catch (Exception e) { e.printStackTrace (); } } }
Esse é o fim do modelo de delegação, vamos dormir.