Latest web development tutorials

Prototyp-Modell

Prototyp-Modell (Prototyp-Muster) wird verwendet, um ein doppeltes Objekt zu schaffen, während die Leistung zu gewährleisten. Diese Art von Entwurfsmustern gehören Schema zu erstellen, die die beste Weg, um Objekte zu erstellen bietet.

Dieses Modell ist ein Prototyp-Schnittstelle, die einen Klon des aktuellen Objekts zu erstellen verwendet wird. Wenn die direkten Kosten, ein Objekt zu schaffen, relativ groß ist, indem dann dieses Modell. Zum Beispiel muss ein Objekt erzeugt werden soll, nachdem die Datenbank eine kostspielige Operation ist. Wir können das Objekt das nächste Mal eine Anfrage an seinen Klon zurückzukehren cachen, die Zeit benötigt, um die Datenbank zu aktualisieren, um Datenbank-Anrufe zu reduzieren.

Einführung

Absichten: Der Prototyp verwendet Instanzen der angegebenen Objekttypen zu erstellen, und neue Objekte erstellen , indem Sie den Prototyp zu kopieren.

Vor allem zu lösen: Erstellen und Prototyp zur Laufzeit zu löschen.

Wann verwendet: 1, wenn ein System sollte seiner Produktentstehung, Zusammensetzung und Darstellung unabhängig sein.2 wird, wenn eine Instanz der Klasse zur Laufzeit vorgegeben werden, beispielsweise durch dynamische Belastung. 3, um zu vermeiden, eine parallele Klassenhierarchie und Produkthierarchie, wenn Factory-Klasse zu schaffen. 4, wenn eine Instanz einer Klasse kann ein paar verschiedene Kombinationen von Zustand in einer Zeit haben. Stellen Sie eine entsprechende Anzahl von Prototypen und klonen sie sein kann bequemer als die manuelle jedes Mal mit dem entsprechenden Zustand der Instanz der Klasse.

Wie zu lösen: die Verwendung eines existierenden Prototyp - Objekt, und zwar schnell Prototyp Objekt als Instanz erzeugen.

Key - Code:1, zu erreichen , Duplizierung, JAVA Vererbung klonbar, umschreiben Klon () können in .NET Objektklasse MemberwiseClone () -Methode verwendet werden , um das Ziel der flache Kopie oder Serialisierung Weise zu erreichen eine tiefe Kopie zu erreichen. 2 die gleiche Prototypmodell für die Kopplung zwischen dem Benutzer und dem spezifischen Typ (variable Art) Isolierung zwischen dem Klassenobjekt, es erfordert auch, daß diese "variable Typ" eine stabile Schnittstelle.

Anwendungsbeispiele: 1, Zellteilung.2, JAVA in Object clone () -Methode.

Vorteile: 1, Leistung verbessert wird .2 entkommen Constraint-Konstruktor.

Nachteile: 1, mit einem Klonmethode erfordert Berücksichtigung der Klasse der Funktionen zu übernehmen, die die neue Klasse nicht schwierig, aber für bestehende Klassen ist nicht sehr einfach sein, vor allem , wenn eine Klassenreferenz unterstützt keine Serialisierung von indirekten Objekt, oder eine cyclische Struktur eine Referenz auf die Zeit enthält.2 muss die klonbar-Schnittstelle implementieren. 3, vermeiden Constraint-Konstruktor.

Einsatzszenarien: 1, Szenarien Ressourcenoptimierung.2, Klasse Initialisierung brauchen eine Menge von Ressourcen zu verdauen, einschließlich der Ressourcendaten, Hardware-Ressourcen. 3, Leistungs- und Sicherheitsanforderungen der Szene. 4, ein neues Objekt zu erzeugen erfordert sehr mühsame Vorbereitung oder Datenzugriff können Sie den Prototyp-Modell verwenden. 5 ist eine Vielzahl von Objekten durch Szene modifiziert. 6 muss ein Objekt Zugriff auf andere Objekte zu schaffen, und jeder Anrufer muss möglicherweise seinen Wert zu ändern, sollten vom Aufrufer verwendet, um ein Prototyp-Modell für multiple Kopien von Objekten verwendet wird. 7, im aktuellen Projekt, das Prototyp-Modell selten allein auftreten, und Factory-Methode Muster erscheinen in der Regel zusammen, erstellen Sie ein Objekt Klon-Methode, und dann mit dem Anrufer durch die Factory-Methode zur Verfügung gestellt. Und Java-Prototyp-Modell hat als Gesamtheit aufgenommen wurde, kann es leicht zu bedienen verwendet werden.

Hinweis: Bei einer Klasse von Instanziieren das neue Objekt zu konstruieren ist anders, Prototypmodell durch Kopieren eines vorhandenen Objekt ein neues Objekt zu erzeugen ist.Shallow Kopie erkennen klonbar, neu zu schreiben, eine tiefe Kopie wird Binärstream gelesen von Serializable implementieren.

Realisierung

Wir werden eine abstrakte KlasseFormund erweitert die EntitätsklassenShape- Klasse erstellen. Der nächste Schritt ist es, die KlasseShapeCache,die Form solcher Objekte zu definieren , in einemHashtablein, und zum Zeitpunkt der Anforderung an ihre Klone zurückzukehren gespeichert sind.

PrototypPatternDemo,unsere Demonstration KlassenShapeCacheKlasse mit demShape- Objekt zu erhalten.

Prototyp-Modell UML-Diagramm

Schritt 1

Erstellen Sie eine abstrakte Klasse, die die Schnittstelleclonable implementiert.

Shape.java

public abstract class Shape implementiert klonbar {
   
   private String id;
   protected String-Typ;
   
   abstract void draw ();
   
   public String getType () {
      Rückgabetyp;
   }
   
   public String getId () {
      Rückkehr id;
   }
   
   public void setId (String id) {
      this.id = id;
   }
   
   public Object clone () {
      Objekt-Klon = null;
      try {
         Klon = super.clone ();
      } Catch (CloneNotSupportedException e) {
         e.printStackTrace ();
      }
      Rückkehr Klon;
   }
}

Schritt 2

Erstellen von Entity-Klassen, die oben erweitert die abstrakte Klasse.

Rectangle.java

public class Rectangle erstreckt Form {

   public Rectangle () {
     type = "Rechteck";
   }

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

Square.java

public class-Platz erstreckt Form {

   Public Square () {
     type = "Square";
   }

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

Circle.java

public class Kreis erstreckt Form {

   öffentlichen Kreis () {
     type = "Circle";
   }

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

Schritt 3

Erstellen Sie eine Klasse, Entity - Klassen aus der Datenbank erhalten, und speichert sie in einerHashtablein.

ShapeCache.java

Import java.util.Hashtable;

public class ShapeCache {
	
   private static Hashtable <String, Form> shapeMap 
      = New Hashtable <String, Form> ();

   public static Form GetShape (String ShapeID) {
      Form cachedShape = shapeMap.get (ShapeID);
      return (Shape) cachedShape.clone ();
   }

   // Für jede Form laufen Datenbank-Abfragen und die Form erstellen // shapeMap.put (shapeKey, Form);
   // Zum Beispiel wollen wir drei Formen public static void loadCache () hinzuzufügen {
      Kreis Kreis = new Kreis ();
      circle.setId ( "1");
      shapeMap.put (circle.getId (), Kreis);

      Quadrat Quadrat = new-Platz ();
      square.setId ( "2");
      shapeMap.put (square.getId (), quadratisch);

      Rechteck Rechteck = new Rectangle ();
      rectangle.setId ( "3");
      shapeMap.put (rectangle.getId (), Rechteck);
   }
}

Schritt 4

PrototypePatternDemoverwendenShapeCacheKlasse die Form des Klon zu erhalten , ist inder Hashtable gespeichert.

PrototypePatternDemo.java

public class PrototypePatternDemo {
   public static void main (String [] args) {
      ShapeCache.loadCache ();

      Form clonedShape = (Shape) ShapeCache.getShape ( "1");
      System.out.println ( "Shape:" + clonedShape.getType ());		

      Form clonedShape2 = (Shape) ShapeCache.getShape ( "2");
      System.out.println ( "Shape:" + clonedShape2.getType ());		

      Form clonedShape3 = (Shape) ShapeCache.getShape ( "3");
      System.out.println ( "Shape:" + clonedShape3.getType ());		
   }
}

Schritt 5

Stellen Sie sicher, ausgegeben.

Form: Kreis
Form: quadratisch
Form: Rechteck