Fabryka abstrakcyjna

Fabryka abstrakcyjna (Abstract Factory) jest to wzorzec projektowy należący do grupy wzorców kreacyjnych. Jego zadaniem jest określenie interfejsu do tworzenia różnych obiektów należących do tego samego typu (rodziny). Interfejs ten definiuje grupę metod, za pomocą których tworzone są obiekty. Nie jest znana dokładna klasa tych obiektów ale zdefiniowany jest typ tych obiektów (czyli interfejs, który implementują lub klasa, z której dziedziczą).

Przykład zastosowania wzorca fabryki abstrakcyjnej

  1. public interface Apple {
  2.     public String getName();
  3. }
  4. public interface Grape {
  5.     public String getName();
  6. }
  7. public class SourApple implements Apple {
  8.     public String getName() {
  9.         return "Sour Apple! :$";
  10.     }
  11. }
  12. public class SourGrape implements Grape {
  13.     public String getName() {
  14.         return "Sour Grape! :$";
  15.     }
  16. }
  17. public class JucyApple implements Apple {
  18.     public String getName() {
  19.         return "Jucy Apple!";
  20.     }
  21. }
  22. public class JucyGrape implements Grape {
  23.     public String getName() {
  24.         return "Jucy Grape!";
  25.     }
  26. }
  27. // interfejs abstrakcyjnej fabryki tworzącej obiekty implementujące interfejsy Apple oraz Grape
  28. public interface FruitFactory {
  29.     public Apple createApple();
  30.     public Grape createGrape();
  31. }
  32. // implementacja abstrakcyjnej fabryki FruitFactory tworząca obiekty
  33. // konkretnych klas: JucyApple oraz JucyGrape.
  34. public class JucyFruitFactory implements FruitFactory {
  35. // metoda fabrykująca tworząca obiekt klasy JucyApple implementujący interfejs Apple
  36.     public Apple createApple() {
  37.         return new JucyApple();
  38.     }
  39. // metoda fabrykująca tworząca obiekt klasy GrapeApple implementujący interfejs Grape
  40.     public Grape createGrape() {
  41.         return new JucyGrape();
  42.     }
  43. }
  44. // implementacja abstrakcyjnej fabryki FruitFactory tworząca obiekty
  45. // konkretnych klas: SourApple oraz SourGrape.
  46. public class SourFruitFactory implements FruitFactory {
  47.     public Apple createApple() {
  48.         return new SourApple();
  49.     }
  50.     public Grape createGrape() {
  51.         return new SourGrape();
  52.     }
  53. }
  54. // Klasa zawierająca statyczną metodę do pobierania obiektu implementującego
  55. // abstrakcyjną fabrykę FruitFactory. Wybór implementacji fabryki jest uzależniony
  56. // od aktualnego miesiąca.
  57. public class FactoryGetter {
  58.     public static FruitFactory getFruitFactory() {
  59.         Calendar calendar = Calendar.getInstance();
  60.         int month = calendar.get(Calendar.MONTH);
  61.         if ((month > Calendar.APRIL) && (month < Calendar.OCTOBER)) {
  62.             return new JucyFruitFactory();
  63.         } else {
  64.             return new SourFruitFactory();
  65.         }
  66.     }
  67. }
  68. // Przykład zastosowania abstrakcyjnej fabryki
  69. public class Main {
  70.     public static void main(String[] arg) {
  71.         FruitFactory ff = FactoryGetter.getFruitFactory();
  72.         Apple apple = ff.createApple();
  73.         System.out.println(apple.getName());
  74.         Grape grape = ff.createGrape();
  75.         System.out.println(grape.getName());
  76.     }
  77. }

Komentarze

Dodaj nowy komentarz

  • Adresy internetowe są automatycznie zamieniane w odnośniki, które można kliknąć.
  • Dozwolone znaczniki HTML: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Znaki końca linii i akapitu dodawane są automatycznie.

Więcej informacji na temat formatowania

CAPTCHA
Jakie znaki widnieją na obrazku?
Image CAPTCHA
Przepisz ciąg znaków z obrazka.