2012-07-29 16 views
7

ich war durch das java design pattern und habe einige fragen/fragen prototyp design pattern. Lassen Sie mich zuerst sagen, was ich verstanden habe. Prototyp-Design-Muster ist für die Erstellung von Objekten verwendet ist in Bezug auf Speicher oder Ressourcen teuer. In diesem Fall verwenden wir den Klon des Objekts, das bereits verfügbar ist. Was ist der Unterschied zwischen dem Erstellen eines neuen Objekts und clone()? Wo speichert das Objekt im Speicher?java prototype design pattern objekt kreation

+0

Dies könnte für Sie hilfreich sein http://StackOverflow.com/Questions/663079/does-cloning-provide-a-performance-improvement-over-constructors-factory-methods –

Antwort

3

Das Prototyp-Designmuster bietet zwei Arten von Kosteneinsparungen - Zeitersparnis und Platzersparnis.

Zeitersparnis entsteht in Situationen, in denen das Erstellen eines Objekts einen kostenintensiven Zugriff auf zusätzliche Informationen erfordert - beispielsweise das Anfordern von Konfigurationsdaten aus einer Datei, einer Datenbank oder über ein Netzwerk. Wenn Sie beispielsweise viele Seiten aus einer Vorlage erstellen, die auf einem Webserver gespeichert ist, ist es günstiger, die Vorlage einmal zu lesen und sie zu klonen, um den Ausgangspunkt für jede neue Seite zu erhalten, anstatt den Webserver separat abzufragen jede Seite.

Speichereinsparungen ergeben sich durch die Wiederverwendung unveränderlicher Objekte: Wenn Ihr Original viele Zeichenfolgen enthält, müssen beim Erstellen einer neuen Instanz entweder völlig neue unveränderliche Zeichenfolgen erstellt werden oder manuell mit Zeichenfolgensperren gearbeitet werden. Die Verwendung des Prototyp-Musters vermeidet dieses Problem, indem der Klon die unveränderlichen Teile der Vorlage freigibt.

4

Die Java-Methode clone() erstellt nur ein neues Objekt und kopiert Mitgliedsvariablenwerte in sie. Im Allgemeinen ist es weder teurer noch teurer als ein neues Objekt zu erstellen. Die einzige Zeit clone() könnte billiger sein als das Erstellen eines Objekts mit new wäre, wenn der Konstruktor für ein Objekt etwas teuer macht: Was ist zum Beispiel, wenn der Konstruktor die Argumente genommen und sie als Teil einer Datenbankabfrage verwendet hat? In diesem Fall wäre die Verwendung von clone() billiger, da die teure Abfrageoperation nicht stattfinden würde.

Es gibt andere Gründe, dieses Entwurfsmuster zu verwenden: meistens, wenn Objekte vor der Verwendung eine komplizierte Einrichtung benötigen, die in einem Konstruktor nicht bequem ausgeführt werden kann. Stellen Sie sich vor, dass ein Objekt 20 Eigenschaften hatte, die gesetzt werden mussten. Wenn Sie sie mit Konstruktor-Parametern setzen, wäre dieser Konstruktor schrecklich hässlich - stellen Sie sich einen Konstruktor mit 20 Parametern vor! Stattdessen könnten Sie ein Objekt mit vielleicht keinen Parametern konstruieren, die 20 Werte mit Mutator-Methoden und dann das Objekt clone() setzen, um bei Bedarf fertige Kopien zu erstellen. clone() braucht überhaupt keine Parameter, also ist es offensichtlich weniger hässlich. Wenn Sie mehrere Kopien mehrerer verschiedener Versionen dieses Objekts benötigen, wird das Prototypmuster attraktiv.