Latest web development tutorials

Abstrakte Fabrik

Abstrakte Fabrik (Abstract Factory-Muster) um eine Super-Anlage anderen Pflanzen angelegt. Die Anlage ist auch als Super andere Fabriken Fabrik bekannt. Diese Art von Entwurfsmustern gehören Schema zu erstellen, die die beste Weg, um Objekte zu erstellen bietet.

In der abstrakten Factory-Muster, ist die Schnittstelle für eine Pflanze Objekte zu schaffen, ohne ihre Klassen explizit angeben. Jedes erzeugte Objekt nach der Fabrik kann Fabrikmodell liefern.

Einführung

Absichten: eine Reihe von verwandten oder abhängigen Objekte Schnittstelle zu schaffen, ohne ihre konkreten Klassen angeben.

Vor allem zu lösen: Das Hauptproblem der Interface - Optionen.

Wann verwendet: System - Produkte haben mehr als eine Produktfamilie, und das einzige System , in dem eine Familie von Consumer - Produkten.

Wie zu beheben: in einer Produktfamilie innen, mehrere Produkte zu definieren.

Der Schlüsselcode: Aggregat mehrere ähnliche Produkte in einer Fabrik.

Anwendungsbeispiele: Arbeit, um an einigen Sitzungen zu nehmen, müssen zwei oder mehr Sätze von Kleidung sei es, sagen wir, Business - Kleidung (komplette Sätze, eine Reihe von spezifischen Produkten), Mode Kleid (komplette Sätze, eine Reihe von spezifischen Produkten), auch für eine Familie Sie können ein Business-Frauen haben, Geschäftsmänner, Damenmode, Herrenmode, sie sind auch komplette Sätze, nämlich eine Reihe von spezifischen Produkten.Nehmen wir an, eine Situation (in Wirklichkeit nicht existiert, oder aber nicht den Kommunismus, sondern zugunsten der abstrakten Factory-Pattern-Beschreibung), in Ihrem Haus, ein Kleiderschrank (Betonwerk) können nur speichern Sie eine eine solche Kleidung (komplett-Sets, eine Reihe von spezifischen Produkt) jedes Mal, wenn Sie diesen Satz von Kleidung aus dem Schrank, natürlich herausgenommen. Mit OO zu verstehen, zu denken, die ganze Garderobe (Betonwerk) sind Schränke Klasse (abstract Fabrik) ein, und jeder Satz von Kleidung und einschließlich der spezifischen Jacke (ein bestimmtes Produkt), Hosen (ein spezifisches Produkt), das sind in der Tat bestimmte Hemdjacke (abstrakte Produkte), spezifische Hosen sind Hosen (ein anderes abstraktes Produkt).

Pro: Wenn eine Produktfamilie mehr Objekte ausgelegt sind , zusammen zu arbeiten, können wir sicherstellen , dass der Kunde immer nur die gleichen Produktfamilie Gegenstände verwenden.

Nachteile: Erweiterte Produktfamilie ist sehr schwierig, eine Auswahl eines Produkts, die beide in der abstrakten Schöpfer Riga Code zu erhöhen, sondern auch einen bestimmten Code innerhalb hinzuzufügen.

Einsatzszenarien: 1, QQ für die Haut, eine Reihe von Veränderungen zusammen.2, erzeugen ein anderes Betriebssystem Verfahren.

Hinweis: Die erweiterte Produktfamilie ist schwierig, einfach , die Produktebene zu erweitern.

Realisierung

Wir werden dieFormundFarbeSchnittstelle und Implementierung Klasse Schnittstelle dieser Einheiten erstellen. Der nächste Schritt ist eine abstrakte Factory - KlasseAbstractzuerstellen.Dann definieren Sie die Factory - KlasseShapeFactoryundColorFactory,diese beiden Klassen sind ab WerkAbstrakte erweitert.Dann erstellen Sie eine Fabrik Erstellers / Builder - KlasseFactoryProducer.

AbstractFactoryPatternDemo,unsere Demonstration KlassenFactoryProducermitAbstrakteObjekt zu erhalten. Es leitet InformationenFormForm(Kreis / Rechteck / Quadrat)zuAbstrakte,braucht es die Art des Objekts zu erhalten. Es geht auch FarbinformationenFarbe(rot / grün / blau) zuAbstrakte,ist es die Art des Objekts zu erhalten muss.

Abstrakte Fabrik UML-Diagramm

Schritt 1

Schnittstelle, eine Form zu erstellen.

Shape.java

public interface Form {
   Leere draw ();
}

Schritt 2

Erstellen von Entity-Klasse, die die Schnittstelle implementiert.

Rectangle.java

public class Rectangle implementiert Form {

   @Override
   public void draw () {
      System.out.println ( "Inside Rectangle :: draw () -Methode.");
   }
}

Square.java

public class Platz implementiert Form {

   @Override
   public void draw () {
      System.out.println ( "Inside-Platz :: draw () -Methode.");
   }
}

Circle.java

public class Kreis implementiert Form {

   @Override
   public void draw () {
      System.out.println ( "Inside Kreis :: draw () -Methode.");
   }
}

Schritt 3

Erstellen Sie eine Schnittstelle für die Farbe.

Color.java

public interface Farbe {
   Hohlraumfüllung ();
}

Schritt 4

Erstellen von Entity-Klasse, die die Schnittstelle implementiert.

Red.java

public class Red implementiert Farbe {

   @Override
   public void fill () {
      System.out.println ( "Inside Red :: fill () -Methode.");
   }
}

Green.java

public class Grün implementiert Farbe {

   @Override
   public void fill () {
      System.out.println ( "Inside Grün :: fill () -Methode.");
   }
}

Blue.java

public class Blau implementiert Farbe {

   @Override
   public void fill () {
      System.out.println ( "Inside Blau :: fill () -Methode.");
   }
}

Schritt 5

Erstellen Sie eine abstrakte Klasse für die Form und Farbe Objekte, die Fabrik zu bekommen.

AbstractFactory.java

public abstract class Abstract {
   abstrakte Farbe getColor (String Farbe);
   abstrakte Form GetShape (String-Form);
}

Schritt 6

Erstellen Sie erweiterte Abstrakte Factory-Klasse, Entitätsklasse Objekterzeugung auf der Basis der bereitgestellten Informationen.

ShapeFactory.java

public class ShapeFactory erstreckt Abstrakte {
	
   @Override
   öffentliche Form GetShape (String shapeType) {
      if (shapeType == null) {
         return null;
      }		
      if (shapeType.equalsIgnoreCase ( "Kreis")) {
         return new Kreis ();
      } Else if (shapeType.equalsIgnoreCase ( "Rechteck")) {
         return new Rectangle ();
      } Else if (shapeType.equalsIgnoreCase ( "SQUARE")) {
         return new-Platz ();
      }
      return null;
   }
   
   @Override
   Farbe getColor (String Farbe) {
      return null;
   }
}

ColorFactory.java

public class ColorFactory erstreckt Abstrakte {
	
   @Override
   öffentliche Form GetShape (String shapeType) {
      return null;
   }
   
   @Override
   Farbe getColor (String Farbe) {
      if (Farbe == null) {
         return null;
      }		
      if (color.equalsIgnoreCase ( "RED")) {
         return new Red ();
      } Else if (color.equalsIgnoreCase ( "grün")) {
         return new Green ();
      } Else if (color.equalsIgnoreCase ( "BLUE")) {
         return new Blue ();
      }
      return null;
   }
}

Schritt 7

Erstellen Sie eine Fabrik Erstellers / builder Kategorie, die durch Form und Farbe Informationen, um die Fabrik zu erhalten.

FactoryProducer.java

public class FactoryProducer {
   public static Abstrakte GetFactory (String Wahl) {
      if (choice.equalsIgnoreCase ( "Shape")) {
         return new ShapeFactory ();
      } Else if (choice.equalsIgnoreCase ( "COLOR")) {
         return new ColorFactory ();
      }
      return null;
   }
}

Schritt 8

Verwenden Sie FactoryProducer Abstrakte zu bekommen, um das Ziel der Klasse zu erhalten, indem das Unternehmen Typinformationen übergeben.

AbstractFactoryPatternDemo.java

public class AbstractFactoryPatternDemo {
   public static void main (String [] args) {

      // Die Fabrik Form Abstrakte shapeFactory = FactoryProducer.getFactory ( "Shape");

      // Get Objektform Kreis-Form shape1 = shapeFactory.getShape ( "Kreis");

      // Rufen Sie die Zeichenmethode von shape1.draw Kreis ();

      // Get Objektform Rechteck-shape2 = shapeFactory.getShape ( "Rechteck");

      // Die Zeichenmethode von shape2.draw Rectangle () aufrufen;
      
      // Objektform Quadratisch shape3 Get = shapeFactory.getShape ( "SQUARE");

      // Rufen Sie die Zeichenmethode Platz shape3.draw ();

      // Get Farbe Fabriken Abstrakte colorFactory = FactoryProducer.getFactory ( "COLOR");

      // Die Objektfarbe erhalten, ist, rote Farbe color1 = colorFactory.getColor ( "RED");

      // Rufen Sie die Fill-Methode Red color1.fill ();

      // Objektfarbe Grün Farbe color2 = colorFactory.getColor ( "grün") Get;

      // Aufruf Green Fill-Methode color2.fill ();

      // Objektfarbe Blau Farbe color3 = colorFactory.getColor ( "Blau") Get;

      // Rufen Sie die Fill-Methode Blau color3.fill ();
   }
}

Schritt 9

Stellen Sie sicher, ausgegeben.

Innerhalb Kreis :: draw () -Methode.
Innerhalb Rectangle :: draw () -Methode.
Im Inneren Platz :: draw () -Methode.
Innerhalb Red :: fill () -Methode.
Innerhalb Grün :: fill () -Methode.
Innerhalb Blau :: fill () -Methode.