La fonction de base du modèle de délégation est d'être responsable de l'appel et de l'attribution des tâches, comme le modèle d'agence, mais le modèle d'agence se concentre sur le processus, tandis que le modèle de délégation se concentre sur les résultats. Le modèle de délégation est largement utilisé au printemps, et il existe également de nombreux scénarios dans la vie réelle. Par exemple, lorsque le patron attribue des tâches au chef de projet, le chef de projet attribue les tâches aux employés correspondants.
Créer une interface pour les employés
interface publique IEmployee { public void doing (String commond); }
Créer une classe d'employés, employé A
classe publique IEmployeeA implémente IEmployee { @Override public void doing (String commond) { System.out.println ("aaaaaaaaaaaaaaaa"); } }
Créer une classe d'employés, employé B
classe publique IEmployeeB implémente IEmployee { @Override public void doing (String commond) { System.out.println ("bbbbbbbbbbbbbbbbb"); } }
Créer une classe de chef de projet
public class Leader implémente IEmployee { private Map <String, IEmployee> target = new HashMap <String, IEmployee> (); public Leader () { target.put ("前端", nouveau IEmployeeA ()); target.put ("后端", nouveau IEmployeeB ()); } @Override public void doing (String commond) { cibles.get (commond) .doing (commond); } }
Créer une classe de boss
Public class Boss { commande publique void (commande String, chef leader) { leader.doing (commande); } }
Créer une classe de test
public class DemoUtil { public static void main (String [] args) lance Exception { new Boss (). command ("后端", new Leader ()); } }
Résultats de test:
bbbbbbbbbbbbbbbbbb
D'après les résultats ci-dessus, on peut voir que puisque le chef de projet a assigné la tâche aux employés back-end, c'est l'employé B qui a fait le travail arrangé par le patron.
DispatcherServlet au printemps est le mode de délégation utilisé et le mode de délégation est implémenté à la fin de Delegate.
Alors, comment dispatcherServlet implémente-t-il le mode de délégation dans Spring MVC?
Créer une classe affaires
Classe publique ItemController { public void getItemById () {}; }
Public class OrderController { public void getOrderById () {}; }
Créer une classe DispatcherServlet
classe publique DispatcherServlet étend HttpServlet { private void doDispatch (requête HttpServletRequest, réponse HttpServletResponse) { String uri = request.getRequestURI (); ID de chaîne = request.getParameter ("mid"); if ("getItemById"). equals (uri) { new ItemController (). getItemById (id); } else if ("getOrderById" .equals (uri)) { nouveau OrderController (). getOrderById (id); } else { response.getWriter (). write ("404 not found"); } } service void protégé (HttpServletRequest req, HttpServletResponse resp) { try { doDispatch (req, resp); } catch (Exception e) { e.printStackTrace (); } } }
C'est la fin du modèle de délégation, allons dormir.