Java >> Java Tutorial >  >> Java

Entwurfsmuster – Prototypmuster – Teil VI

In diesem Beitrag möchte ich zeigen, wie das Prototype-Designmuster verwendet wird. Wenn Sie über frühere Beiträge zu Designmustern lesen möchten, finden Sie eine Reihe von Beiträgen zu Designmustern

  1. Einführung in Designmuster
  2. Singleton-Muster
  3. Werksmuster
  4. Abstraktes Fabrikmuster
  5. Builder-Muster

Das Prototyp-Designmuster deckt das Erstellungsdesignmuster ab, über das wir bisher geschrieben haben.

Wann verwenden?

Da dies ein kreatives Entwurfsmuster ist, wird es verwendet, wenn die Entscheidung darin besteht, die Erstellungskosten eines Objekts auf herkömmliche Weise zu reduzieren. Es kann darüber gestritten werden, wie sich dies dann von abstrakten Fabrikmustern unterscheidet. Der Hauptvorteil des Prototyp-Entwurfsmusters besteht darin, dass es den Anwendungsfall optimiert, bei dem mehrere Objekte desselben Typs größtenteils dieselben Daten haben.

Ein wichtiges Beispiel ist das Lesen von Konfigurationsdaten aus einer Datei/Datenbank über ein Netzwerk. Auch wenn Sie die Logik zum Erstellen einer neuen Instanz vor dem Client verbergen möchten.

Wie zu verwenden?

Erstens gibt es in diesem Muster eine Schnittstelle von Prototype, die eine Methode zum Klonen hat, und jede konkrete Klasse, die diese Schnittstelle implementiert, implementiert die Methode zum Klonen des Objekts.

public interface Car {

Car clone();

}

Wir haben ein Interface Car, das wir in unseren konkreten Klassen implementieren werden.

package com.bettterjavacode.designpatterns.prototypeexample;

public class Toyota implements Car 
{

    private final String CARNAME = "Toyota";

    public Car clone() 
    {
       return new Toyota();
    }

    @Override
    public String toString() 
    {
      return CARNAME;
    }

}

Wir werden eine Fabrikklasse haben, die uns einen Prototyp basierend auf dem Objekttyp, den wir passiert haben, liefert. Dies sieht wie folgt aus:

package com.bettterjavacode.designpatterns.prototypeexample;

import java.util.HashMap;
import java.util.Map;

public class CarFactory
{

   private static final Map<String, Car> prototypes = new HashMap<String, Car>();

   static 
   {
     prototypes.put("toyota", new Toyota());
     prototypes.put("lexus", new Lexus());
     prototypes.put("bmw", new BMW());
   }

   public static Car getPrototype(String type) 
   {
      return prototypes.get(type).clone();
   }
}

Daher übergibt unsere Demoklasse den Autotyp als Argument, um den Autonamen auszugeben. Das sieht wie folgt aus:

package com.betterjavacode.designpatterns;

import com.bettterjavacode.designpatterns.prototypeexample.Car;
import com.bettterjavacode.designpatterns.prototypeexample.CarFactory;

public class PrototypeDemo 
{
   public static void main(String[] args) 
   {
      if (args.length > 0) 
      {
         for (String type : args) 
         {
            Car prototype = CarFactory.getPrototype(type);
            if (prototype != null) 
            {
               System.out.println(prototype);
            }
         }
      } 
      else 
      {
         System.out.println(" Run again with arguments");
      }
   }
}

Schlussfolgerung

Abschließend haben wir gezeigt, wie man Prototyp-Entwurfsmuster verwendet. Den Code dafür finden Sie hier

Referenzen

  1. Entwurfsmuster – Prototyp
  2. Prototypmuster

Java-Tag