Latest web development tutorials

Fabryka abstrakcyjna

Abstract Factory (fabryka abstrakcyjna) jest tworzony wokół super roślinnych innych roślin. Roślina jest również znany jako super innych fabryk fabryce. Tego rodzaju wzorców projektowych należy stworzyć schemat, który zapewnia najlepszy sposób tworzenia obiektów.

W fabryka abstrakcyjna, interfejs jest odpowiedzialny za tworzenie obiektów związanych z rośliną, bez wyraźnego określania swoich klas. Każdy generowany cel, według fabryce mogą dostarczyć modelu fabrycznego.

wprowadzenie

Intencja: aby stworzyć serię interfejsu pokrewnych lub zależnych obiektów, bez określania ich konkretnych klas.

Głównie do rozwiązania: Głównym problemem opcji interfejsu.

Kiedy stosować: Produkty systemowe mają więcej niż jedną rodzinę produktów, a jedyny system, w którym rodzina produktów konsumenckich.

Jak naprawić: w rodzinie produktów wewnątrz zdefiniować wiele produktów.

Kod klawisza: kruszywa wiele podobnych produktów w fabryce.

Przykłady zastosowań: praca, aby wziąć udział w kilku spotkaniach, nie muszą być dwa lub więcej zestawów ubrań, że, powiedzmy, strój biznesowy (komplety, szereg konkretnych produktów), moda (komplety, szereg konkretnych produktów), nawet dla rodziny Możesz mieć kobiety biznesu, mężczyźni biznesowego, moda damska, moda męska, są również komplety, a mianowicie szereg konkretnych produktów.Załóżmy sytuację (w rzeczywistości nie istnieje, albo nie komunizm, lecz na rzecz Abstract Factory opisie wzoru), w domu, jedna szafa (beton fabrycznych) może przechowywać tylko jeden takich ubrania (komplety, serię konkretnego produktu), za każdym razem, gdy ma to zestaw ubrań z szafy naturalnie wyjęte. Z OO myślenia do zrozumienia, całą szafę (betoniarnia) są szafy klasy (streszczenie fabryczne) jeden, a każdy jeden zestaw ubrań i tym konkretnym Jacket (konkretny produkt), spodnie (specyficzny Produkt), są to bowiem specyficzny koszula kurtka (streszczenie produkty), charakterystyczne spodnie spodnie (inny abstrakcyjne produktu).

Plusy: Kiedy rodzina Produkty Inne obiekty są zaprojektowane tak, aby pracować razem, możemy zapewnić, że klient zawsze używać tylko te same obiekty rodziny produktów.

Wady: Dalsza rodzina produktów jest bardzo trudne, aby zwiększyć zakres produktu, zarówno w abstrakcyjne Creator kod Rydze, ale także, aby dodać konkretny kod wewnątrz.

Scenariusze użycia: 1, QQ dla skóry, zestaw zmian razem.2, wygenerować różne procedury systemu operacyjnego.

Uwaga: W dalszej rodziny produktów jest trudne, łatwo rozszerzyć poziom produktu.

realizacja

Będziemy tworzyć interfejs i implementacja klasy interfejskształtikolortych podmiotów. Następnym krokiem jest utworzenie klasy abstrakcyjnej fabrycznieAbstractFactory.Następnie określićShapeFactoryklasy fabryki iColorFactory,te dwie klasy są fabrycznie rozszerzonaAbstractFactory.Następnie należy utworzyć klasy twórca fabryki / budowniczyFactoryProducer.

AbstractFactoryPatternDemo,nasze zajęcia demonstracyjne wykorzystująceFactoryProducerdostaćAbstractFactoryobiekt. przechodzi ona kształtKształtinformacje(Okrąg / prostokąt / kwadrat)doAbstractFactory,musi uzyskać typ obiektu. przekazuje również informacje o kolorze(czerwony/ zielony / niebieski), abyAbstractFactory,musi uzyskać typ obiektu.

Fabryka abstrakcyjna diagram UML

Etap 1

Interfejs utworzyć kształt.

Shape.java

public interface Shape {
   void draw ();
}

Etap 2

Tworzenie klasy podmiotu, który implementuje interfejs.

Rectangle.java

public class Rectangle realizuje Shape {

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

Square.java

Plac realizuje public class Shape {

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

Circle.java

Koło realizuje public class Shape {

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

etap 3,

Tworzenie interfejsu dla koloru.

Color.java

Kolor {public interface
   void fill ();
}

Etap 4

Tworzenie klasy podmiotu, który implementuje interfejs.

Red.java

public class Red realizuje Kolor {

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

Green.java

public class Zielona realizuje Kolor {

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

Blue.java

public class Niebieski Kolor realizuje {

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

Etap 5

Tworzenie klasy abstrakcyjnej dla koloru i kształtu obiektów, aby uzyskać fabrykę.

AbstractFactory.java

public abstract class AbstractFactory {
   Streszczenie kolor GetColor (kolor String);
   abstrakcyjny kształt getShape (kształt String);
}

Etap 6

Tworzenie rozszerzoną AbstractFactory klasy fabrycznej, podmiot generację klasy obiektów na podstawie podanych informacji.

ShapeFactory.java

public class ShapeFactory rozciąga AbstractFactory {
	
   @Override
   Kształt publicznego getShape (String shapeType) {
      if (shapeType == null) {
         powrót null;
      }		
      if (shapeType.equalsIgnoreCase ( "CIRCLE")) {
         powrót nowy krąg ();
      } Else if (shapeType.equalsIgnoreCase ( "prostokąt")) {
         return new Rectangle ();
      } Else if (shapeType.equalsIgnoreCase ( "Kwadrat")) {
         powrót Plac Nowy ();
      }
      powrót null;
   }
   
   @Override
   Kolor GetColor (kolor String) {
      powrót null;
   }
}

ColorFactory.java

public class ColorFactory rozciąga AbstractFactory {
	
   @Override
   Kształt publicznego getShape (String shapeType) {
      powrót null;
   }
   
   @Override
   Kolor GetColor (kolor String) {
      if (kolor == null) {
         powrót null;
      }		
      if (color.equalsIgnoreCase ( "czerwony")) {
         powrót Nowy czerwony ();
      } Else if (color.equalsIgnoreCase ( "zielony")) {
         powrót New Green ();
      } Else if (color.equalsIgnoreCase ( "Blue")) {
         powrót Nowe niebieski ();
      }
      powrót null;
   }
}

Krok 7

Utwórz fabryczny kategorię twórcą / budowniczy, przechodząc przez kształt lub kolor, aby uzyskać informacje fabrykę.

FactoryProducer.java

{public class FactoryProducer
   public static AbstractFactory getFactory (wybór String) {
      if (choice.equalsIgnoreCase ( "kształt")) {
         powrót nowego ShapeFactory ();
      } Else if (choice.equalsIgnoreCase ( "COLOR")) {
         powrót nowego ColorFactory ();
      }
      powrót null;
   }
}

Krok 8

Używać FactoryProducer uzyskać AbstractFactory, w celu uzyskania obiektu klasy przekazując informacje typu jednostki.

AbstractFactoryPatternDemo.java

{public class AbstractFactoryPatternDemo
   public static void main (String [] args) {

      // Pobierz kształt fabryki AbstractFactory shapeFactory = FactoryProducer.getFactory ( "kształt");

      // Pobierz obiekt Shape kształcie okręgu shape1 = shapeFactory.getShape ( "CIRCLE");

      // Wywołanie metody przy zaciąganiu shape1.draw Kole ();

      // Pobierz obiekt prostokąta Shape shape2 = shapeFactory.getShape ( "Prostokąt");

      // Wywołanie metody przy zaciąganiu shape2.draw Rectangle ();
      
      // Pobierz obiekt kształt kwadratowy kształt shape3 = shapeFactory.getShape ( "Kwadrat");

      // Wywołujemy metodę draw Plac shape3.draw ();

      // Pobiera kolor Fabryki AbstractFactory colorFactory = FactoryProducer.getFactory ( "COLOR");

      // Pobierz kolor obiektu jest Czerwony Kolor color1 = colorFactory.getColor ( "czerwony");

      // Wywołujemy metodę fill Red color1.fill ();

      // Pobierz obiekt koloru zielonego koloru color2 = colorFactory.getColor ( "zielony");

      // Wywołanie Greena wypełnienia metody color2.fill ();

      // Pobierz obiekt kolor niebieski kolor color3 = colorFactory.getColor ( "niebieski");

      // Wywołujemy metodę fill Niebieski color3.fill ();
   }
}

Krok 9

Sprawdź, czy wyjście.

Metoda Wewnątrz Circle :: draw ().
Metoda Wewnątrz prostokąta :: draw ().
Metoda środku placu :: draw ().
Metoda Wewnątrz Red :: fill ().
Wewnątrz metody Zielona :: fill ().
Metoda Wewnątrz Niebieski :: fill ().