Latest web development tutorials

Pesi mosca

Pesi Mosca (mosca Pattern) è utilizzato principalmente per ridurre il numero di oggetti creati per ridurre l'utilizzo della memoria e migliorare le prestazioni. Questo tipo di modelli di progettazione appartengono modello strutturale, che prevede una riduzione del numero di oggetti da migliorare la struttura dell'oggetto in modo richiesto dall'applicazione.

Mosca cercare di riutilizzare gli oggetti esistenti dello stesso, se l'oggetto corrispondente non viene trovato, viene creato un nuovo oggetto. Noi disegnare 20 cerchi distribuiti in luoghi diversi con la creazione di cinque oggetti per dimostrare questo modello. Dal momento che solo cinque generi di colori disponibili, così l'attributo di colore viene utilizzato per controllare un oggettoCircleesistente.

introduzione

Intento: Utilizzare la condivisione per supportare un gran numero di oggetti a grana fine.

Principalmente per risolvere: In un gran numero di oggetti, può causare overflow di memoria, abbiamo messo insieme una porzione in cui l'abstract, se avete la stessa richiesta di servizio direttamente indietro gli oggetti esistenti in memoria, per evitare di ri-creato.

Quando utilizzare: 1, il sistema ha un gran numero di oggetti.2, questi oggetti consumano molta memoria. 3, lo stato della maggior parte di questi oggetti possono essere esteriorizzato. 4, un sacco di questi oggetti possono essere suddivisi in gruppi a seconda dello stato intrinseca, quando l'oggetto viene rimosso dagli oggetti esterni Yun, ogni oggetto può essere impostato utilizzando un oggetto, invece. 5, il sistema non dipende l'identità di questi oggetti, questi oggetti sono indistinguibili.

Come risolvere: Analizzando con un codice di identificazione univoco, se non vi è in memoria, viene restituito il codice unico di identificazione degli oggetti identificati.

La chiave codice: HashMap memorizzato con questi oggetti.

Esempi di applicazione: 1, JAVA nella stringa, se restituisce, se non poi creare una stringa memorizzata nel pool di buffer di stringa all'interno.2, il database pool di dati.

Vantaggi: riducono notevolmente la creazione di oggetti, riducendo la memoria del sistema, in modo che l'efficienza è migliorata.

Svantaggi: aumento responsabile del sistema, dobbiamo separare lo stato stato interno ed esterno, e lo stato esterno di natura sono intrinsecamente non dovrebbe cambiare con lo stato interno di cambiamento, altrimenti si creerà sistema caos.

scenari di utilizzo: 1, il sistema ha un gran numero di oggetti simili.2, hanno bisogno di piscina.

Nota: 1, prestare attenzione allo stato della divisione interna ed esterna dello Stato, o può causare problemi di thread-sicurezza.2, la classe deve avere un oggetto predefinito da controllare.

realizzazione

Creeremo una interfacciaformae l'implementazione dell'interfacciafigura del cerchioclassi di entità. Il passo successivo è quello di definire le classi di fabbricaShapeFactory.

ShapeFactoryavere uncerchiodiHashMap,dove ilcerchiodi colore chiave denominata oggetto. Ogni volta che si riceve una richiesta, si creerà un cerchio di colore specifica.ShapeFactoryverificarnel'HashMapnell'oggetto cerchio, se gli oggettiCircletrovato, viene restituito l'oggetto, altrimenti si creerà un immagazzinate nella HashMap per preparare il successivo utilizzo del nuovo oggetto, e l'oggetto viene restituito al client.

FlyWeightPatternDemo,la nostra demo per arrivare classe da utilizzare oggettoShapeShapeFactory. Sarà la trasmissione di informazioni(rosso / verde / blu / nero/ bianco) perShapeFactory,ha bisogno di ottenere il colore dell'oggetto.

modello mosca diagramma UML

fase 1

Creare un'interfaccia.

Shape.java

Forma interfaccia pubblica {
   void draw ();
}

fase 2

Creare classe di entità che implementa l'interfaccia.

Circle.java

public class Circle implementa Shape {
   colore String privato;
   private int x;
   int y privato;
   int raggio privato;

   Circle pubblico (colore String) {
      this.colore = colore;		
   }

   setX public void (int x) {
      this.x = x;
   }

   Sety public void (int y) {
      this.y = y;
   }

   setRadius public void (int radius) {
      this.radius = raggio;
   }

   @Override
   draw public void () {
      System.out.println ( "Circle: Draw () [Colore:" + colore 
         + ", X:" + x + ", y" + y + ", radius:" + raggio);
   }
}

fase 3

Creare una fabbrica per produrre le classi oggetto entità basate sulle informazioni fornite.

ShapeFactory.java

import java.util.HashMap;

public class ShapeFactory {
   HashMap finale private static <String, Forma> circleMap = new HashMap ();

   Forma getCircle public static (colore String) {
      cerchio cerchio = (cerchio) circleMap.get (colore);

      if (cerchio == null) {
         cerchio = new Circle (colore);
         circleMap.put (colore, cerchio);
         System.out.println ( "Creazione di cerchio di colore:" + colore);
      }
      tornare cerchio;
   }
}

fase 4

Utilizzare la fabbrica per ottenere un oggetto entità della classe passando le informazioni di colore.

FlyweightPatternDemo.java

public class FlyweightPatternDemo {
   colori private static final String [] = 
      { "Rosso", "Verde", "Blue", "bianco", "Nero"};
   Main (string [] args) {public static void

      for (int i = 0; i <20; ++ i) {
         cerchio cerchio = 
            (Circle) ShapeFactory.getCircle (getRandomColor ());
         circle.setX (getRandomX ());
         circle.setY (getRandomY ());
         circle.setRadius (100);
         circle.draw ();
      }
   }
   String private static getRandomColor () {
      ritorno colori [(int) (Math.random () * colors.length)];
   }
   private static int getRandomX () {
      ritorno (int) (Math.random () * 100);
   }
   private static int getRandomY () {
      ritorno (int) (Math.random () * 100);
   }
}

fase 5

Verifica uscita.

Creazione di cerchio di colore: Nero
Circle: Draw () [Colore: Nero, x: 36, y: 71, Raggio: 100
Creazione di cerchio di colore: verde
Circle: Draw () [Colore: Verde, x: 27, y: 27 Raggio: 100
Creazione di cerchio di colore: Bianco
Circle: Draw () [Colore: Bianco, x: 64, y: 10, Raggio: 100
Creazione di cerchio di colore: rosso
Circle: Draw () [Colore: Rosso, x: 15, y: 44, Raggio: 100
Circle: Draw () [Colore: Verde, x: 19, y: 10, Raggio: 100
Circle: Draw () [Colore: Verde, x: 94, y: 32, Raggio: 100
Circle: Draw () [Colore: Bianco, x: 69, y: 98, Raggio: 100
Creazione di cerchio di colore: blu
Circle: Draw () [Colore: Blu, x: 13, y: 4, Raggio: 100
Circle: Draw () [Colore: Verde, x: 21, y: 21, Raggio: 100
Circle: Draw () [Colore: Blu, x: 55, y: 86, Raggio: 100
Circle: Draw () [Colore: Bianco, x: 90, y: 70, Raggio: 100
Circle: Draw () [Colore: Verde, x: 78, y: 3, Raggio: 100
Circle: Draw () [Colore: Verde, x: 64, y: 89, Raggio: 100
Circle: Draw () [Colore: Blu, x: 3, y: 91, Raggio: 100
Circle: Draw () [Colore: Blu, x: 62, y: 82, Raggio: 100
Circle: Draw () [Colore: Verde, x: 97, y: 61, Raggio: 100
Circle: Draw () [Colore: Verde, x: 86, y: 12, Raggio: 100
Circle: Draw () [Colore: Verde, x: 38, y: 93, Raggio: 100
Circle: Draw () [Colore: Rosso, x: 76, y: 82, Raggio: 100
Circle: Draw () [Colore: Blu, x: 95, y: 82, Raggio: 100