Latest web development tutorials

Prototyp modelu

Model Prototype (prototyp deseń) służy do tworzenia duplikat obiektu, zapewniając jednocześnie wydajność. Tego rodzaju wzorców projektowych należy stworzyć schemat, który zapewnia najlepszy sposób tworzenia obiektów.

Model ten jest interfejsem prototyp, który jest używany do tworzenia klon danego obiektu. Gdy bezpośredni koszt tworzenia obiektu jest stosunkowo duża, a następnie przy użyciu tego modelu. Na przykład, obiekt powinien tworzyć, gdy baza danych jest operacją kosztowną. Możemy buforować obiektowi następnym razem, gdy żądanie powrotu do swojego klona, ​​czas potrzebny do aktualizacji bazy danych, w celu ograniczenia połączeń bazy danych.

wprowadzenie

Zamiar: Prototyp wykorzystywane do tworzenia wystąpień określonych typów obiektów, a także tworzyć nowe obiekty, kopiując prototyp.

Głównie do rozwiązania: tworzenie i usuwanie prototyp przy starcie.

Kiedy stosować: 1, gdy system powinien być niezależny od jego powstania produktu, składu i reprezentacji.2, w wystąpienie klasy ma być określona w czasie pracy, na przykład za pomocą dynamicznej. 3, w celu uniknięcia tworzenia równoległych hierarchii klas i hierarchii, gdy produkt klasy fabrycznej. 4, gdy instancja klasy może mieć kilka różnych kombinacji stanu, w jednym czasie. Stworzenie odpowiedniej liczby prototypów oraz ich klonowanie może być wygodniejsze niż instrukcji za każdym razem z odpowiednim stanem instancji klasy.

Jak rozwiązać: wykorzystanie istniejącego obiektu prototypu i szybko wyprodukować prototyp obiektu jako przykład.

Klucz kod: 1, w celu osiągnięcia klonowania operację, Java dziedziczenia Cloneable, przepisać clone (), mogą być używane w klasie .NET Object MemberwiseClone () w celu osiągnięcia celu płytkiej kopii lub serializacji sposób osiągnąć głęboką kopię.2, ten sam model prototypowy dla połączenia pomiędzy użytkownikiem a specyficzny rodzaj (typ zmiennej) izolacji pomiędzy obiektu klasy, wymaga również, że te "typ zmiennej" ma stabilną interfejs.

Przykłady zastosowań: 1, podziału komórek.2, JAVA w metodzie klonu Object ().

Zalety: 1, wydajność jest lepsza.2 uciec wiązania konstruktora.

Wady: 1, z metody klonowania wymaga wzięcia pod uwagę klasę funkcji, której nowa klasa nie jest trudne, ale dla istniejących klas nie może być bardzo proste, zwłaszcza gdy odniesienie Klasa nie obsługuje serializacji obiektu pośredniego, lub strukturę cykliczną, zawierającą odniesienie do czasu.2, musi implementować Cloneable interfejs. 3, należy unikać wiązania konstruktora.

Scenariusze użycia: 1, scenariusze optymalizacji zasobów.2, inicjalizacji klasy potrzebne do trawienia dużo zasobów, w tym zasobów danych, zasobów sprzętowych. 3, wydajność i wymagania bezpieczeństwa sceny. 4, generując nowy obiekt wymaga bardzo żmudne przygotowania lub brak dostępu do danych, można użyć modelu prototypowego. 5, wiele obiektów modyfikowanych sceny. 6, obiekt musi zapewnić dostęp do innych obiektów, a każdy dzwoniący może trzeba zmodyfikować jego wartości, należy rozważyć użycie prototypowy model dla wielu kopii obiektów wykorzystywanych przez rozmówcę. 7, w rzeczywistym projekcie, model prototypowy rzadko występują samodzielnie, a metoda wytwórcza na ogół pojawiają się razem, stworzyć metodę klonowania obiektu, a następnie dostarczane do rozmówcy metodą fabryczną. I model prototypowy Java została włączona jako integralna całość, może być łatwo wykorzystane do użycia.

Uwaga: Z klasą instancji do budowy nowego obiektu jest inna, model prototypowy jest wygenerowanie nowego obiektu przez skopiowanie istniejącego obiektu.Płytki kopię sprawę Cloneable, przepisywanie głęboka kopia jest odczytywany strumień binarny poprzez wdrożenie serializacji.

realizacja

Stworzymy klasę abstrakcyjnąkształti wydłuża podmiot klas klasyShape.Następnym krokiem jest określenieShapeCacheklasykształttych przedmiotów są przechowywane wHashtablew, w chwili składania wniosku, aby powrócić do ich klonów.

PrototypPatternDemo,nasze zajęcia demonstracyjne wykorzystujące klasęShapeCacheuzyskać obiektShape.

Prototyp modelu UML diagram

Etap 1

Tworzenie klasy abstrakcyjnej, która implementuje interfejsClonable.

Shape.java

public abstract class Shape {realizuje Cloneable
   
   private string id;
   chronione typu String;
   
   abstract void draw ();
   
   public String GetType () {
      Zwraca typ;
   }
   
   public String getId () {
      powrót id;
   }
   
   public void setId (string id) {
      this.id = id;
   }
   
   public Object clone () {
      Obiekt klon = null;
      try {
         klon = super.clone ();
      } Catch (CloneNotSupportedException e) {
         w.printStackTrace ();
      }
      powrót klon;
   }
}

Etap 2

Tworzenie klas encji wyżej rozszerza klasę abstrakcyjną.

Rectangle.java

public class Rectangle rozciąga Shape {

   Prostokąt publicznego () {
     type = "Prostokąt";
   }

   @Override
   public void draw () {
      ( "Metoda Wewnątrz prostokąt :: draw ().") System.out.println;
   }
}

Square.java

Plac rozciąga public class Shape {

   Plac publicznego () {
     type = "kwadrat";
   }

   @Override
   public void draw () {
      ( "Metoda Wewnątrz Plac :: draw ().") System.out.println;
   }
}

Circle.java

public class Koło rozciąga Shape {

   Koło publicznego () {
     type = "Circle";
   }

   @Override
   public void draw () {
      ( "Metoda wewnątrz okręgu :: draw ().") System.out.println;
   }
}

etap 3,

Tworzenie klasy, uzyskać klas encji z bazy danych i zapisuje je wHashtablew.

ShapeCache.java

import java.util.Hashtable;

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

   public static Kształt getShape (String shapeId) {
      Kształt cachedShape = shapeMap.get (shapeId);
      return (Shape) cachedShape.clone ();
   }

   // Dla każdego kształtu prowadzony zapytań do bazy danych i utworzyć kształt // shapeMap.put (shapeKey, kształt);
   // Na przykład, chcemy dodać trzy kształty public static void loadCache () {
      Koło Koło Koło = new ();
      circle.setId ( "1");
      shapeMap.put (circle.getId (), kółko);

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

      Prostokąt Prostokąt = new Rectangle ();
      rectangle.setId ( "3");
      shapeMap.put (rectangle.getId (), prostokąt);
   }
}

Etap 4

PrototypePatternDemoużyć klasyShapeCacheaby uzyskać kształt klonujestprzechowywany wHashtable.

PrototypePatternDemo.java

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

      Kształt clonedShape = (SHAPE) ShapeCache.getShape ( "1");
      System.out.println ( "Shape" + clonedShape.getType ());		

      Kształt clonedShape2 = (SHAPE) ShapeCache.getShape ( "2");
      System.out.println ( "Shape" + clonedShape2.getType ());		

      Kształt clonedShape3 = (SHAPE) ShapeCache.getShape ( "3");
      System.out.println ( "Shape" + clonedShape3.getType ());		
   }
}

Etap 5

Sprawdź, czy wyjście.

Kształt: Koło
Kształt: Plac
Kształt: prostokąt