Latest web development tutorials

muszej

Flyweight (flyweight deseń) stosuje się głównie do zmniejszenia liczby przedmiotów wytworzonych w celu zmniejszenia zużycia pamięci i zwiększyć wydajność. Ten typ desenie należą modelem strukturalnym, który zapewnia zmniejszenie liczby obiektów do poprawy struktury obiektu w sposób wymagany przez aplikację.

Muszej spróbować ponownie wykorzystać istniejące obiekty tego samego, jeśli obiekt nie zostanie znaleziony, zostanie utworzony nowy obiekt. Będziemy rysować okręgi 20 rozproszonych w różnych miejscach, tworząc pięć przedmiotów, w celu wykazania tego wzorca. Ponieważ tylko pięć rodzajów dostępnych kolorów, więc atrybut koloru służy do sprawdzania istniejący obiektokręgu.

wprowadzenie

Intencja: Za pomocą dzielenia na wsparcie dużej liczby obiektów drobnoziarnistych.

Głównie do rozwiązania: W dużej liczby obiektów, może to spowodować przepełnienie pamięci, kładziemy razem część której streszczenie, jeśli mają takie samo żądanie usługi bezpośrednio z powrotem istniejące obiekty w pamięci, w celu uniknięcia ponownego utworzony.

Kiedy stosować: 1, system posiada wiele obiektów.2 obiekty te zużywają dużo pamięci. 3, stan większości z tych obiektów można externalized. 4, wiele z tych obiektów można podzielić na grupy w zależności od wewnętrznej państwa, gdy obiekt jest usuwany z zewnętrznych obiektów Yun, każdy obiekt może być ustawiony za pomocą obiektu w zamian. 5, układ nie zależy od tożsamości tych przedmiotów, te cele są nierozróżnialne.

Jak naprawić: Analiza z unikalnym kodem identyfikacyjnym, jeśli nie ma w pamięci, zwracany jest niepowtarzalny kod identyfikacyjny zidentyfikowanych obiektów.

Klucz Kod: HashMap przechowywane z tych obiektów.

Przykłady zastosowań: 1, Java w ciąg, jeśli wróci, jeśli nie to utworzyć ciąg przechowywane w puli buforów strun wewnątrz.2, baza danych puli danych.

Zalety: znaczne zmniejszenie tworzenia obiektów, zmniejszając pamięci systemu, tak że sprawność jest lepsza.

Wady: wzrost za system, musimy oddzielić wewnętrzną i zewnętrzną stan państwa i stan zewnętrzny natury są z natury rzeczy nie powinno się zmieniać ze stanem wewnętrznym zmian, inaczej będzie stworzenie systemu chaos.

Scenariusze użycia: 1, system posiada dużą liczbę podobnych obiektów.2, muszą połączyć scenę.

Uwaga: 1, należy zwrócić uwagę na stan zewnętrznego i wewnętrznego podziału państwa, ponieważ może to spowodować problemy z wątku bezpieczeństwa.2, klasa musi mieć obiekt fabryki mają być kontrolowane.

realizacja

Będziemy tworzyć interfejskształti implementację interfejsukształcie okręgupodmiot klas. Następnym krokiem jest zdefiniowanie klasy produkcyjneShapeFactory.

ShapeFactoryposiadagronoHashMap, gdzie klucz kolorKołonazwie obiektu. Za każdym razem po otrzymaniu wniosku, stworzy specyficzny kolor koło.ShapeFactorysprawdzić jegoHashMapw obiekcie okręgu, jeśli znalezione obiektygrono,obiekt jest zwracany, w przeciwnym razie stworzy przechowywane w hashmap przygotować do późniejszego użytku nowego obiektu, a obiekt jest zwracany do klienta.

FlyWeightPatternDemo naszedemo, aby uzyskać klasę używaćShapeFactoryobiektShape.Będzie ona przekazywania informacji(czerwony / zielony / niebieski / czarny/ biały) doShapeFactory,musi uzyskać kolor obiektu.

Muszej wzór diagram UML

Etap 1

Tworzenie interfejsu.

Shape.java

public interface Shape {
   void draw ();
}

Etap 2

Tworzenie klasy podmiotu, który implementuje interfejs.

Circle.java

Koło realizuje public class Shape {
   private String kolor;
   private int x;
   private int y;
   private int promienia;

   Koło publicznych (kolor String) {
      this.color = kolor;		
   }

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

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

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

   @Override
   public void draw () {
      System.out.println ( "Circle: Draw () [Color:" + kolor 
         + "X:" + x + "y" + y + "Promień" + promień);
   }
}

etap 3,

Tworzenie zakładu do produkcji klasy encji obiektu na podstawie podanych informacji.

ShapeFactory.java

import java.util.HashMap;

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

   public static Kształt getCircle (kolor String) {
      Koło Koło = (Circle) circleMap.get (kolor);

      if (koło == null) {
         circle = new Koło (kolor);
         circleMap.put (kolor, okrąg);
         System.out.println ( "Tworzenie koło kolorów:" + kolor);
      }
      powrót krąg;
   }
}

Etap 4

Użyj fabryki w celu uzyskania obiektu encji klasy, przekazując informacje o kolorze.

FlyweightPatternDemo.java

{public class FlyweightPatternDemo
   private static String końcowe kolory [] = 
      { "Red", "zielony", "Niebieski", "Biały", "czarny"};
   public static void main (String [] args) {

      for (int i = 0; i <20; ++ i) {
         Koło Koło = 
            (Circle) ShapeFactory.getCircle (getRandomColor ());
         circle.setX (getRandomX ());
         circle.setY (getRandomY ());
         circle.setRadius (100);
         circle.draw ();
      }
   }
   getRandomColor private static String () {
      zwracają kolory [(int) (Math.random () * colors.length)];
   }
   private static int getRandomX () {
      return (int) (Math.random () * 100);
   }
   private static int getRandomY () {
      return (int) (Math.random () * 100);
   }
}

Etap 5

Sprawdź, czy wyjście.

Tworzenie krąg kolor: czarny
Koło: Draw () [Kolor: Czarny, x: 36 y: 71, Promień: 100
Tworzenie krąg kolor: zielony
Koło: Draw () [Kolor: zielony, x: 27 y: 27, Promień: 100
Tworzenie krąg kolor: biały
Koło: Draw () [Kolor: Biały, x: 64 y: 10, Promień: 100
Tworzenie krąg kolor: czerwony
Koło: Draw () [Kolor: Czerwony, x: 15 y: 44, Promień: 100
Koło: Draw () [Kolor: zielony, x: 19 y: 10, Promień: 100
Koło: Draw () [Kolor: zielony, x: 94 y: 32, Promień: 100
Koło: Draw () [Kolor: Biały, x: 69 y: 98, Promień: 100
Tworzenie krąg kolor: niebieski
Koło: Draw () [Kolor: niebieski, x: 13 y: 4, Promień: 100
Koło: Draw () [Kolor: zielony, x: 21 y: 21, Promień: 100
Koło: Draw () [Kolor: niebieski, x: 55 y: 86, Promień: 100
Koło: Draw () [Kolor: Biały, x: 90 y: 70, Promień: 100
Koło: Draw () [Kolor: zielony, x: 78 y: 3, Promień: 100
Koło: Draw () [Kolor: zielony, x: 64 y: 89, Promień: 100
Koło: Draw () [Kolor: niebieski, x: 3, y: 91, Promień: 100
Koło: Draw () [Kolor: niebieski, x: 62 y: 82, Promień: 100
Koło: Draw () [Kolor: zielony, x: 97 y: 61, Promień: 100
Koło: Draw () [Kolor: zielony, x: 86 y: 12, Promień: 100
Koło: Draw () [Kolor: zielony, x: 38 y: 93, Promień: 100
Koło: Draw () [Kolor: Czerwony, x: 76 y: 82, Promień: 100
Koło: Draw () [Kolor: niebieski, x: 95 y: 82, Promień: 100