Domů » Informatika » Objektové programování » Návrhový vzor » Abstraktní továrna (Abstract Factory)

Abstraktní továrna (Abstract Factory)

Návrhový vzor Abstract Factory je návrhovým vzorem pro strukturu objektů. Obsahuje o jednu úroveň abstrakce více než vzor Factory. V systému je vytvořena hierarchie továrních tříd. Klient má k dispozici pouze rozhraní jejich abstraktního předka a neměl by mít žádná očekávání ohledně tovární třídy, která bude pro vytvoření instancí použita.

UML diagramy

diagram tříd

Související vzory
  • Factory – o jednu úroveň abstrakce méně
Příklad
Rozhraní produktů

kód v jazyce Java - Zobrazit

  1. /**
  2.  * Obecný dopravní prostředek.
  3.  *
  4.  * @author Vojtěch Hordějčuk
  5.  */
  6. public interface Vehicle
  7. {
  8.   // ...
  9. }
Konkrétní produkty

kód v jazyce Java - Zobrazit

  1. /**
  2.  * Osobní automobil.
  3.  *
  4.  * @author Vojtěch Hordějčuk
  5.  */
  6. public class Car implements Vehicle
  7. {
  8.   // ...
  9. }
  10.  
  11. /**
  12.  * Nákladní vůz.
  13.  *
  14.  * @author Vojtěch Hordějčuk
  15.  */
  16. public class Truck implements Vehicle
  17. {
  18.   // ...
  19. }
  20.  
  21. /**
  22.  * Malá loďka.
  23.  *
  24.  * @author Vojtěch Hordějčuk
  25.  */
  26. public class Boat implements Vehicle
  27. {
  28.   // ...
  29. }
  30.  
  31. /**
  32.  * Trajekt.
  33.  *
  34.  * @author Vojtěch Hordějčuk
  35.  */
  36. public class Ferry implements Vehicle
  37. {
  38.   // ...
  39. }
Rozhraní továrních tříd

kód v jazyce Java - Zobrazit

  1. /**
  2.  * Rozhraní tovární třídy pro vytváření vozidel.
  3.  *
  4.  * @author Vojtěch Hordějčuk
  5.  */
  6. public interface VehicleFactory
  7. {
  8.   /**
  9.    * Vytvoří malé vozidlo.
  10.    *
  11.    * @return malé vozidlo
  12.    */
  13.   public Vehicle createSmallVehicle();
  14.  
  15.   /**
  16.    * Vytvoří velké vozidlo.
  17.    *
  18.    * @return velké vozidlo
  19.    */
  20.   public Vehicle createBigVehicle();
  21. }
Tovární třídy

kód v jazyce Java - Zobrazit

  1. /**
  2.  * Tovární třída, která vytváří instance automobilů.
  3.  *
  4.  * @author Vojtěch Hordějčuk
  5.  */
  6. public class CarFactory implements VehicleFactory
  7. {
  8.   @Override
  9.   public Vehicle createBigVehicle()
  10.   {
  11.     return new Truck();
  12.   }
  13.  
  14.   @Override
  15.   public Vehicle createSmallVehicle()
  16.   {
  17.     return new Car();
  18.   }
  19. }
  20.  
  21. /**
  22.  * Tovární třída, která vytváří instance lodí.
  23.  *
  24.  * @author Vojtěch Hordějčuk
  25.  */
  26. public class ShipFactory implements VehicleFactory
  27. {
  28.   @Override
  29.   public Vehicle createBigVehicle()
  30.   {
  31.     return new Ferry();
  32.   }
  33.  
  34.   @Override
  35.   public Vehicle createSmallVehicle()
  36.   {
  37.     return new Boat();
  38.   }
  39. }
Test

kód v jazyce Java - Zobrazit

  1. public static void main(String[] args)
  2. {
  3.   // vytvořit tovární třídy
  4.  
  5.   VehicleFactory carFactory = new CarFactory();
  6.   VehicleFactory shipFactory = new ShipFactory();
  7.  
  8.   // požádat tovární třídu o vytvoření produktů
  9.  
  10.   Vehicle smallCar = carFactory.createSmallVehicle();
  11.   Vehicle bigCar = carFactory.createBigVehicle();
  12.   Vehicle smallShip = shipFactory.createSmallVehicle();
  13.   Vehicle bigShip = shipFactory.createBigVehicle();
  14. }

Reference