1. Einführung in das einfache Fabrikmodell
Einfacher Fabrikmodus, auch als "statischer Werksmethodenmodus" bezeichnet. Es gehört zum "Modus erstellen" (das Muster zum Erstellen eines Objekts) und ist eine spezielle Implementierung des Musters "Fabrikmethode".
Normalerweise verwenden wir das einfache Fabrikmuster, um Klassen zu erstellen. Beispielsweise wird das Erhalten von Thread -Pool -Objekten im einfachen Werksmodus erreicht. Sein Strukturdiagramm lautet wie folgt:
Fabrik: Die Fabrik ist der Kern des einfachen Fabrikmodells und bietet externe Schnittstellen. Wenn ein Kunde oder ein anderes Programm Produktobjekte erhalten möchte, werden diese über die Fabrikschnittstelle erhalten.
Abstrakte Produkte: Abstract -Produkte werden von (vielen) verschiedenen Produkten abstrahiert. Produkt kann eine Schnittstelle oder eine abstrakte Klasse sein.
Spezifisches Produkt: Das in der Fabrik zurückgegebene Produktobjekt wird tatsächlich durch Betonprodukt erstellt.
2. Einfaches Fabrikmuster -Code -Modell
public class Factory {öffentliches statisches Produkt newInstance () {return New ConcreteProduct (); }} public Abstract Product {} öffentliche Klasse ConcreteProdu erweitert das Produkt {public concreteProduct () {}} Klassendiagramm des Modells
3.. Praktische Anwendung des einfachen Fabrikmodells
Wenn wir ein Servlet schreiben, um Kundenanfragen zu bearbeiten, werden wir beispielsweise häufig mehrere Geschäftslogiken in einem Servlet behandeln:
geschützter void dopost (httpServletRequest -Anforderung, httpServletResponse -Antwort) {String flag = request.getParameter ("Flag"); if (flag.equals ("service1")) {service1 (); } else if (flag.equals ("service2") {service2 (); } ...}Das obige ist die allgemeine Methode unseres Servlets, um Multi-Business-Logik zu verarbeiten und eine Reihe von Anweisungen zu schreiben. Ein besserer Weg ist es, die angeforderte Verteilung vom Servlet zu trennen, damit das Servlet nur die Geschäftslogik behandelt. Wir betrachten verschiedene angeforderte Servlets als Produktklassen. javax.servlet.httpServlet ist die Produkt übergeordnet, und Javax.servlet.servlet ist die Produktschnittstelle. Auf diese Weise definieren wir einen ServletFactory, analysieren die URL -Anfrage im Filter und übergeben sie zur Verarbeitung an den ServletFactory. Dies ist eine typische einfache Fabrikanwendung.
@Webfilter ("/transRequest") öffentliche Klasse Transrequest implementiert Filter {private String servletName; @Override public void dofilter (ServletRequest Request, ServletResponse -Antwort, Filterchain -Kette) löst IOException aus, ServletException {httpServletRequest myRequest = (httpServletRequest) Anfrage; // Erhalten Sie den angeforderten Servlet -Namen, hier stimmen wir zu, dass die Anfrage in Form von/ServletName -String -Namen [] = myRequest.getRequesturi (). Trim (). Split ("/") erfolgt; ServletName = Namen [2]; if (servletName! Servlet.Service (Anfrage, Antwort); } else chain.dofilter (Anfrage, Antwort); } Jedes Mal, wenn wir um eine Anfrage anfordern, verwenden wir die Fabrik, um ein Servlet zu erstellen, mit dem eine große Menge an Servletpfadinformationen in der XML konfiguriert werden kann. Außerdem wird die Logik klarer und die Servlets über das Geschäft auf Geschäftsebene nur über das Geschäft umgehen.
Fabrikkategorien sind wie folgt:
public class servletFactory {public static servlet createServlet (String servletName) löst ServletException {if (servletName.equals ("servletName1")) {return New Service1 (); } else if (servletName.equals ("servletName2")) {return New service2 (); } else {werfen neuer servletException ("kein solches Servlet"); }}}Obwohl die obige Fabrikklasse die umständliche wenn sonst nicht beiseite legt, löst die Idee, die einfache Fabrik zu verwenden, immer noch einige Probleme. Eine einfache Fabrik ist ein sehr einfaches Designmuster, das nicht als Designmuster angesehen werden kann, und die gelösten Probleme sind ebenfalls begrenzt. Die obige Anfrageverteilung wurde implementiert. Zum Beispiel ist Struts2 natürlich das Rahmen keine einfache Fabrik.
4. Zusammenfassung
Das einfache Fabrikmodell, das zusammenfasst, ist eine Fabrikklasse, eine Produktschnittstelle (tatsächlich kann es auch eine abstrakte Klasse oder sogar eine gewöhnliche Elternklasse sein) und eine Gruppe spezifischer Produkte, die Produktschnittstellen implementieren. Diese Fabrikklasse erstellt eine bestimmte Implementierungsklasse, die auf den bestandenen Parametern basiert und sie als Ergebnis in eine Schnittstelle umwandelt.