Entwurfsmuster - Fabrikmuster

Das Factory-Muster ist eines der am häufigsten verwendeten Entwurfsmuster in Java. Diese Art von Entwurfsmuster fällt unter das Erstellungsmuster, da dieses Muster eine der besten Möglichkeiten zum Erstellen eines Objekts bietet.

Im Factory-Muster erstellen wir ein Objekt, ohne die Erstellungslogik dem Client zur Verfügung zu stellen, und verweisen über eine gemeinsame Schnittstelle auf neu erstellte Objekte.

Implementierung

Wir werden eine Shape- Schnittstelle und konkrete Klassen erstellen, die die Shape- Schnittstelle implementieren . Als nächster Schritt wird eine Factory-Klasse ShapeFactory definiert.

FactoryPatternDemo , unsere Demo-Klasse, verwendet ShapeFactory , um ein Shape- Objekt abzurufen . Es werden Informationen ( CIRCLE / RECTANGLE / SQUARE ) an ShapeFactory übergeben , um den benötigten Objekttyp abzurufen .

Schritt 1

Erstellen Sie eine Schnittstelle.

Shape.java

public interface Shape {
   void draw();
}

Schritt 2

Erstellen Sie konkrete Klassen, die dieselbe Schnittstelle implementieren.

Rectangle.java

public class Rectangle implements Shape {

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

Square.java

public class Square implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Square::draw() method.");
   }
}

Circle.java

public class Circle implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Circle::draw() method.");
   }
}

Schritt 3

Erstellen Sie eine Factory, um basierend auf den angegebenen Informationen ein Objekt der konkreten Klasse zu generieren.

ShapeFactory.java

public class ShapeFactory {
	
   //use getShape method to get object of type shape 
   public Shape getShape(String shapeType){
      if(shapeType == null){
         return null;
      }		
      if(shapeType.equalsIgnoreCase("CIRCLE")){
         return new Circle();
         
      } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
         return new Rectangle();
         
      } else if(shapeType.equalsIgnoreCase("SQUARE")){
         return new Square();
      }
      
      return null;
   }
}

Schritt 4

Verwenden Sie die Factory, um ein Objekt der konkreten Klasse abzurufen, indem Sie Informationen wie den Typ übergeben.

FactoryPatternDemo.java

public class FactoryPatternDemo {

   public static void main(String[] args) {
      ShapeFactory shapeFactory = new ShapeFactory();

      //get an object of Circle and call its draw method.
      Shape shape1 = shapeFactory.getShape("CIRCLE");

      //call draw method of Circle
      shape1.draw();

      //get an object of Rectangle and call its draw method.
      Shape shape2 = shapeFactory.getShape("RECTANGLE");

      //call draw method of Rectangle
      shape2.draw();

      //get an object of Square and call its draw method.
      Shape shape3 = shapeFactory.getShape("SQUARE");

      //call draw method of square
      shape3.draw();
   }
}

Schritt 5

Überprüfen Sie die Ausgabe.

Inside Circle::draw() method.
Inside Rectangle::draw() method.
Inside Square::draw() method.