Heim  >  Artikel  >  Java  >  Am Beispiel von Java-Code wird das einfache Fabrikmuster in Entwurfsmustern erläutert

Am Beispiel von Java-Code wird das einfache Fabrikmuster in Entwurfsmustern erläutert

黄舟
黄舟Original
2017-01-20 11:18:041399Durchsuche

Einfach ausgedrückt besteht das Factory-Muster darin, einen Objekttyp entsprechend der Anforderung zurückzugeben. Die Verwendung des Factory-Musters bedeutet, dass es unpraktisch ist, wenn die Instanziierung des Objekts und die Codeabhängigkeit zu groß sind Der Zweck der Verwendung der Factory besteht darin, die Instanziierung des Objekts vom Hauptprogrammcode zu entkoppeln:

Einführung in das Simple Factory Pattern (Simple Factory), auch bekannt als „statisches Factory-Methodenmuster“. Es gehört zum „Creation Pattern“ (dem Muster zum Erstellen von Objekten) und ist eine spezielle Implementierung des „Factory Method“-Musters.
Normalerweise verwenden wir das einfache Factory-Muster, um Klassen zu erstellen. Das Erhalten eines Thread-Pool-Objekts wird beispielsweise durch das einfache Factory-Muster erreicht. Das Strukturdiagramm lautet wie folgt:

Am Beispiel von Java-Code wird das einfache Fabrikmuster in Entwurfsmustern erläutert

Factory: Die Factory ist der Kern des einfachen Factory-Musters und stellt die externe Schnittstelle bereit. Wenn der Client oder ein anderes Programm das Produktobjekt erhalten möchte, muss es es über die Factory-Schnittstelle abrufen.

Abstrakte Produkte: Abstrakte Produkte sind Abstraktionen von (vielen) verschiedenen Produkten. Das Produkt kann eine Schnittstelle oder eine abstrakte Klasse sein.
Betonprodukt: Das in der Fabrik zurückgegebene Produktobjekt wird tatsächlich über ConcreteProduct erstellt.

2. Einfaches Fabrikmuster-Codemodell

public class Factory {
 public static Product newInstance() {
  return new ConcreteProduct();
 }
}
public abstract Product {
}
public class ConcreteProduct extends Product {
 public ConcreteProduct() {}
}

Am Beispiel von Java-Code wird das einfache Fabrikmuster in Entwurfsmustern erläutert

3. Praktische Anwendung des einfachen Fabrikmusters

Wir schreiben ein Servlet Bei der Verarbeitung von Client-Anfragen verarbeitet ein Servlet häufig mehrere Geschäftslogiken, wie zum Beispiel:

protected void doPost(HttpServletRequest request, HttpServletResponse response) {
 String flag = request.getParameter("flag");
 if(flag.equals("service1")) {
  service1();
 }else if(flag.equals("service2")) {
  service2();
 }
 ...
}
Das Obige ist die herkömmliche Methode für unser Servlet, mehrere Geschäftslogiken zu verarbeiten. Schreiben Sie eine if else-Anweisung. Eine bessere Möglichkeit besteht darin, die Verteilung der Anforderungen vom Servlet zu trennen und das Servlet nur die Geschäftslogik verarbeiten zu lassen. Wir betrachten verschiedene angeforderte Servlets als Produktklassen, javax.servlet.HttpServlet ist die übergeordnete Produktklasse, javax.servlet.Servlet ist die Produktschnittstelle, also definieren wir eine ServletFactory, analysieren die URL-Anfrage im Filter und übergeben sie an die ServletFactory zur Bearbeitung Das ist es. Dies ist eine typische einfache Fabrikanwendung.

@WebFilter("/TransRequest")
public class TransRequest implements Filter{
 private String servletName;
 @Override
 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
  HttpServletRequest myRequest = (HttpServletRequest)request;
  //拿到请求的servlet名字, 这里我们约定请求都是/servletName形式
  String names[] = myRequest.getRequestURI().trim().split("/");
  servletName = names[2];
  if( servletName != null) {
  //以下是最典型的两句简单工厂的例子
   Servlet servlet = ServletFactory.createServlet(servletName);
   servlet.service(request, response);
  }else
   chain.doFilter(request, response);
 }
Jedes Mal, wenn eine Anfrage eingeht, verwenden wir die Factory, um ein Servlet zu erstellen. Dies erspart die Konfiguration einer großen Menge an Servlet-Pfadinformationen in XML und ist bequemer. Und dadurch wird auch die Logik klarer. Das Servlet wickelt nur Geschäfte auf der Geschäftsebene ab.

Die Factory-Klasse lautet wie folgt:

public class ServletFactory {
 public static Servlet createServlet(String servletName) throws ServletException {
  if(servletName.equals("servletName1")) {
   return new Service1();
  }else if(servletName.equals("servletName2")){
   return new Service2();
  }else{
   throw new ServletException("No such servlet");
  }
 }
}
Obwohl die obige Factory-Klasse das umständliche „Wenn sonst“ nicht aufgibt, löst sie dennoch einige Probleme, indem sie die Idee einer einfachen Factory verwendet. Simple Factory ist ein sehr einfaches Entwurfsmuster, das nicht als Entwurfsmuster betrachtet wird, und die Probleme, die es löst, sind ebenfalls sehr begrenzt. Die obige Anforderungsverteilung wurde in allen wichtigen JavaEE-Frameworks wie Struts2 implementiert. Natürlich ist das Framework keine einfache Fabrik.

4. Zusammenfassung

Einfaches Fabrikmuster ist zusammenfassend eine Fabrikklasse, eine Produktschnittstelle (tatsächlich kann es auch eine abstrakte Klasse oder sogar eine gewöhnliche übergeordnete Klasse sein) und eine Gruppe von Produkten, die das spezifische Produkt der Schnittstelle und dieser Factory-Klasse implementieren, erstellen eine spezifische Implementierungsklasse basierend auf den übergebenen Parametern, transformieren sie als Ergebnis in die Schnittstelle und geben sie zurück.

Oben wird Java-Code als Beispiel verwendet, um das einfache Fabrikmuster im Entwurfsmuster zu erläutern. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn