Domů » Informatika » Objektové programování » Návrhový vzor » Tovární metoda (Factory Method)

Tovární metoda (Factory Method)

Jako tovární metoda (factory method) se označuje metoda, jejíž účel je vytvořit novou instanci nějakého objektu a vytvořenou instanci vrátit. Druh objektu i jeho počáteční vlastnosti jsou dané přijatými parametry, případně i stavem objektu, který tovární metodu poskytuje.

Instanční tovární metoda

Instanční tovární metoda se používá tam, kde je vytvářený objekt nějakým způsobem odvozený od aktuální instance třídy, která tovární metodu poskytuje. Tyto metody se používají hlavně u tzv. konstantních tříd (immutable classes), jejichž stav nelze po vytvoření měnit a pro změnu některého z parametrů je třeba vytvořit instanci novou. Ačkoliv tato vlastnost nevypadá na první pohled výhodně, umožňuje zvýšit podíl čistých funkcí v programu a tak do objektového programovacího jazyka převzít některé výhody funkcionálního programování.

Příklady

kód v jazyce Java - Zobrazit

  1. public class Rectangle {
  2.   private final int a;
  3.   private final int b;
  4.  
  5.   public Rectangle(int a, int b) {
  6.     this.a = a;
  7.     this.b = b;
  8.   }
  9.  
  10.   // první dvě tovární metody vytváří novou instanci se změnou jednoho rozměru
  11.  
  12.   public Rectangle setA(int newA) {
  13.     return new Rectangle(newA, this.b);
  14.   }
  15.  
  16.   public Rectangle setB(int newB) {
  17.     return new Rectangle(this.a, newB);
  18.   }
  19.  
  20.   // další tovární metoda vytváří obdélník s násobenými rozměry
  21.  
  22.   public Rectangle grow(int factor) {
  23.     return new Rectangle(this.a * factor, this.b * factor);
  24.   }
  25. }

Statická tovární metoda

Tovární metoda může být statická, pokud všechny informace nutné pro vytvoření požadovaného objektu dostane jako parametry. Takové tovární metody lze sdružovat do logických celků a pro každý takový celek vytvořit tzv. tovární třídu. Taková třída zpravidla obsahuje jen spolu související statické tovární metody.

Příklady

kód v jazyce Java - Zobrazit

  1. public static Rectangle createRectangle(int a, int b) {
  2.   return new Rectangle(a, b);
  3. }

kód v jazyce Java - Zobrazit

  1. public static Rectangle createSquare(int a) {
  2.   return new Rectangle(a, a);
  3. }

Reference