Latest web development tutorials

prototipo

prototipo (prototipo del modello) viene utilizzato per creare un oggetto duplicato, garantendo al tempo stesso le prestazioni. Questo tipo di modelli di progettazione appartengono creare schema, che fornisce il modo migliore per creare oggetti.

Questo modello è un prototipo di interfaccia, che viene usato per creare un clone dell'oggetto corrente. Quando il costo diretto di creazione di un oggetto è relativamente grande, quindi utilizzando questo modello. Ad esempio, un oggetto deve essere creato dopo il database è una operazione costosa. Possiamo cache l'oggetto alla successiva richiesta di ritornare al suo clone, il tempo necessario per aggiornare il database, al fine di ridurre le chiamate di database.

introduzione

Intento: Il prototipo utilizzato per creare istanze dei tipi di oggetti specificati e creare nuovi oggetti copiando il prototipo.

Soprattutto per risolvere: la creazione e l'eliminazione di prototipi in fase di esecuzione.

Quando usare: 1, quando un sistema dovrebbe essere indipendente dalla sua creazione del prodotto, la composizione e la rappresentazione.2, quando un'istanza della classe deve essere specificata in fase di esecuzione, ad esempio, dal caricamento dinamico. 3, al fine di evitare la creazione di una gerarchia di classi e la gerarchia del prodotto quando la classe di fabbrica parallelo. 4, quando un'istanza di una classe può avere un paio di combinazioni diverse di Stato in una sola volta. Stabilire un corrispondente numero di prototipi e clonare loro può essere più conveniente rispetto al manuale di volta in volta con lo stato appropriato della istanza della classe.

Come risolvere: l'uso di un oggetto prototipo esistente, e rapidamente produrre prototipi oggetto come un'istanza.

Codice chiave: 1, per ottenere un funzionamento clonazione, JAVA eredità Cloneable, riscrivere clone (), può essere utilizzato in classe .NET Object MemberwiseClone () per raggiungere lo scopo della copia o serializzazione modo superficiale per ottenere una copia profonda.2, lo stesso modello prototipo per l'accoppiamento tra il l'isolamento tipo specifico (tipo di variabile) tra l'oggetto classe utente e, si richiede anche che questi "tipo di variabile" ha un'interfaccia stabile.

Esempi di applicazione: 1, la divisione cellulare.2, JAVA nel metodo Object clone ().

Vantaggi: 1, le prestazioni sono migliorate.2 sfuggire costruttore vincolo.

Svantaggi: 1, con un metodo di clonazione richiede di prendere in considerazione la classe di funzioni, che la nuova classe non è difficile, ma per classi esistenti non può essere molto facile, soprattutto quando un riferimento di classe non supporta la serializzazione di oggetto indiretto, o una struttura ciclica che contiene un riferimento al tempo.2, deve implementare l'interfaccia Cloneable. 3, evitare di costruttore di vincolo.

scenari di utilizzo: 1, scenari di ottimizzazione delle risorse.2, l'inizializzazione della classe hanno bisogno per digerire un sacco di risorse, inclusi i dati delle risorse, risorse hardware. 3, i requisiti di sicurezza della scena prestazioni e. 4, generando un nuovo oggetto richiede molto noioso preparazione o l'accesso ai dati, è possibile utilizzare il modello di prototipo. 5, una pluralità di oggetti modificati dalla scena. 6, un oggetto ha la necessità di fornire l'accesso ad altri oggetti, e ogni chiamante potrebbe essere necessario modificare il suo valore, considerare l'utilizzo di un modello prototipo per più copie di oggetti utilizzati dal chiamante. 7, nel progetto attuale, il modello prototipo di rado si verificano solo, e Factory Method generalmente appaiono insieme, creare un metodo clone oggetto, e quindi fornito al chiamante con il metodo factory. E Java prototipo modello è stato incorporato come un tutto unico, che può essere facilmente utilizzato da usare.

Nota: Con una classe istanziando per costruire il nuovo oggetto è diverso, prototipo del modello è quello di generare un nuovo oggetto copiando un oggetto esistente.copia superficiale realizzare Cloneable, riscrivere, una copia profonda viene letta flusso binario mediante l'attuazione di Serializable.

realizzazione

Creeremo unaforma diclasse astratta ed estende la classeShapeclassi di entità. Il passo successivo consiste nel definire laShapeCache classe,la forma di tali oggetti sono memorizzati in unHashtable,e al momento della richiesta di tornare alle loro cloni.

PrototypPatternDemo,i nostri corsi dimostrativi utilizzando classeShapeCacheper ottenere l'oggettoShape.

prototipo diagramma UML

fase 1

Creare una classe astratta che implementa l'interfacciaclonabile.

Shape.java

pubblica Forma classe astratta implementa Cloneable {
   
   String id privato;
   tipo String protetta;
   
   vuoto astratto draw ();
   
   public String getType () {
      Tipo di ritorno;
   }
   
   public String getId () {
      tornare id;
   }
   
   setId public void (String id) {
      this.id = id;
   }
   
   clone public Object () {
      Object clone = null;
      try {
         clone = super.clone ();
      } Catch (CloneNotSupportedException e) {
         e.printStackTrace ();
      }
      tornare clone;
   }
}

fase 2

Creare classi di entità sopra estende la classe astratta.

Rectangle.java

public class Rettangolo estende Shape {

   pubblico Rettangolo () {
     type = "Rettangolo";
   }

   @Override
   draw public void () {
      ( "Metodo all'interno rettangolo :: draw ().") System.out.println;
   }
}

Square.java

public class Piazza estende Shape {

   Piazza pubblico () {
     type = "Square";
   }

   @Override
   draw public void () {
      ( "Metodo all'interno Piazza :: draw ().") System.out.println;
   }
}

Circle.java

public class Circle è un'estensione di Shape {

   pubblico Circle () {
     type = "Circle";
   }

   @Override
   draw public void () {
      ( "Metodo all'interno Circle :: draw ().") System.out.println;
   }
}

fase 3

Creare una classe, ottenere classi di entità dal database, e li memorizza in unHashtablein.

ShapeCache.java

import java.util.Hashtable;

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

   Forma public static getShape (String shapeId) {
      Forma cachedShape = shapeMap.get (shapeId);
      ritorno (Forma) cachedShape.clone ();
   }

   // Per ogni query di database corsa forma, e creare la forma // shapeMap.put (ShapeKey, forma);
   // Per esempio, vogliamo aggiungere tre forme loadCache public static void () {
      cerchio cerchio = new Circle ();
      circle.setId ( "1");
      shapeMap.put (circle.getId (), cerchio);

      Square Square = new Square ();
      square.setId ( "2");
      shapeMap.put (square.getId (), quadrato);

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

fase 4

PrototypePatternDemoutilizzare la classeShapeCacheper ottenere la forma del clonevienememorizzato nellaHashtable.

PrototypePatternDemo.java

public class PrototypePatternDemo {
   Main (string [] args) {public static void
      ShapeCache.loadCache ();

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

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

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

fase 5

Verifica uscita.

Forma: Circle
Forma: Piazza
Forma: Rettangolo